Easy Number Challenge(求因子個數)
阿新 • • 發佈:2019-01-29
Crawling in process...
Crawling failed
Time Limit:2000MS
Memory Limit:262144KB 64bit IO Format:%I64d & %I64u
Description
Let's denote d(n) as the number of divisors of a positive integer n. You are given three integers a, b and c. Your task is to calculate the following sum:
Find the sum modulo
1073741824 (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
Input2 2 2
Output
20
Input
5 6 7
Output
1520
Sample Output
Hint
For the first example.
- d
- 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 is 1 + 2 + 2 + 3 + 2 + 3 + 3 + 4 = 20.
題意:即求將每個數的因子個數相加
題解:打表列出每個數的因子個數,相加即可
#include <iostream> #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<<ans<<endl; return 0; }