Crawling in process... Crawling failed Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Description
Let's denoted(n) as the number of divisors of a positive integern. You are given three integers a, b and c. Your task is to calculate the following sum:
文章图片
Find the sum modulo1073741824 (230).
Input
The first line contains three space-separated integers a, b and c (1?≤?a,?b,?c?≤?100).
Output
Print a single integer — the required sum modulo 1073741824 (230).
Sample Input
Input
2 2 2
Output
20
Input
5 6 7
Output
1520
Sample Output
Hint
For the first example.
- d(1·1·1)?=?d(1)?=?1;
- d(1·1·2)?=?d(2)?=?2;
- d(1·2·1)?=?d(2)?=?2;
- d(1·2·2)?=?d(4)?=?3;
- d(2·1·1)?=?d(2)?=?2;
- d(2·1·2)?=?d(4)?=?3;
- d(2·2·1)?=?d(4)?=?3;
- d(2·2·2)?=?d(8)?=?4.
So the result is1?+?2?+?2?+?3?+?2?+?3?+?3?+?4?=?20.
题意:即求将每个数的因子个数相加
题解:打表列出每个数的因子个数,相加即可
#include
#define MAXN 1000100
using namespace std;
int df[1000500]={0};
int main()
{
int i,j,k;
int a,b,c;
int ans=0;
for(i=1;
i<=MAXN;
i++)
{
df[i]++;
j=i+i;
while(j<=MAXN)
{
df[j]++;
j+=i;
}
df[i]%=1073741824;
}
cin>>a>>b>>c;
for(i=1;
i<=a;
i++)
for(j=1;
j<=b;
j++)
for(k=1;
k<=c;
k++)
{
ans+=df[i*j*k];
ans%=1073741824;
}
cout<
推荐阅读
- HDU 5528【2015长春现场赛 B】 Count a * b
- 类欧几里得算法|[类欧几里得算法 数论] BZOJ 2987 Earthquake
- [数论] Codeforces 819D R #421 D.Mister B and Astronomers & 516E R #292 E. Drazil and His Happy Friends
- 模板 poj2947 Widget Factory 高斯消元
- 【扩展欧几里得】练习题
- 扩展欧几里得【数论
- 数论|hdu 5322 Hope(分治+NTT)
- HDU 5528 Count a × b
- 线性同余方程组
- 数论|AtCoder Beginner Contest 156 C.Rally