F(x)
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
我们定义 F(x)是满足 x mod(a*b) == 0这样的a,b的组数。现在给你一个n,你需要求出 F(n)
-
输入
-
有多组测试数据。
每组测试数据输入一个整数n (1 <= n <= 10^11)
输出
- 每组测试数据输出 Case x: y ,x 表示第x组测试数据,y表示F(n)的值,细节参考样例。 样例输入
-
1 2 3 4
样例输出
-
Case 1: 1 Case 2: 3 Case 3: 3
Case 4: 6
-
//暴力求所有因子(加点优化), 暴力求解 #include <stdio.h> //#include <math.h> long long data[100001]; long long getNum(long long n) { long long i, j, cnt = 0, ans = 0; for(i = 1; i*i < n; i++) //此处优化 { if(n%i == 0) { data[cnt++] = i; data[cnt++] = n/i; } } if(i*i == n) { data[cnt++] = i; } for(i = 0; i < cnt; i++) { for(j = 0; j < cnt; j++) { if(n%(data[i]*data[j]) == 0) { ans++; } } } return ans; } int main() { long long n, m, t = 0; while(scanf("%lld", &n) != EOF) { m = getNum(n); printf("Case %lld: %lld\n", ++t, m); } return 0; }
-
有多组测试数据。