现在假设 y = n +k (k为正整数) ,
那么带入公式,可以得出 x = (n*(n+k))/k = n*n/k + n; 由于x 是正整数,现在的关键问题就是
要求出 n*n/ k 有多少组正整数的可能,显然,所要求的就是 n*n 因子的个数
整数分解:
任何一个正整数都可以表示成素数的x次方之积,所以本题就被转化成了求n ^2的素因子个数;
先把n分解得到 n = p1^e1 * p2^e2 * ......*pr^er 其中p是< n 的素数那么n 的素因子, 则n的因子个数 k = (e1 + 1) * (e2 + 1) * (e3 + 1)*......
所以:n ^2的因子数是k = (2*e1+1) * (2*e2+1)* (2*e3+1)......
这个题还要注意一点就是当n是素数的时候,很显然 k *= 3
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int N=40000;
int prime[N],p;
bool mark[N];
void init()
{
}
int main()
{
}