我们定义 F(x)是满足 x mod(a*b) == 0这样的a,b的组数。现在给你一个n,你需要求出 F(n)
输入格式:
多组数据,每组第一行有一个整数n, 0 < n <= 10^11。
输出格式:
每组输出一行,满足条件的(a,b)对数。
啥都不想说了,耐心点的同学看看代码吧。
c++代码:
#include <iostream>
#define inf 0x7fffffff
#define MOD 1000000007
using namespace std;
const int maxn = 0x7fffffff;
int main() {
long long n;
while(scanf("%I64d", &n) != EOF) {
if(n == 1) {
printf("1\n");
continue;
}
long long a, b;
long long res = 0;
for(a=1; a*a<n; a++) {
if(n%a == 0) {
long long k = n/a;
long long num = 0;
for(b=1; b*b<k; b++) {
if(k%b == 0) {
if(b > a)
res++;
if(k/b > a)
res++;
}
}
if(b*b==k && b > a)
res++;
}
}
res += res;
for(a=1; a*a<=n; a++) {
if(n%(a*a) == 0)
res++;
}
printf("%I64d\n", res);
}
return 0;
}