現在假設 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
#include
#include
using namespace std;
const int n=40000;
int prime[n],p;
bool mark[n];
void init()}}
}int main()
ans*=(2*cnt+1);}}
if(n>1) ans*=3;
printf("%d\n\n",ans/2+1);
//很顯然ans為奇數(全是奇數相乘),中間因子為n(只算一種)
}return 0;
}
HDU1299 素數分解
include includeusing namespace std bool isprime 100000 int prime 10000 tot 0,temp,n long long ans int main int t scanf d t for int kase 1 kase t kase ...
求因子和與因子個數
求因子和與因子個數 包含1和本身 所有因子個數 n 與所有因子的和 n 都是乘 積 性函式。定義1 因子和函式 定義為整數n的所有正因子之和,記為 n 定義2 因子個數函式 定義為正整數n的所有正因子個數,記為 n 定理1 設p是乙個素數,a是乙個正整數,那麼 n 1 p p 2 p a p a 1...
求個數 素數因子
public class primefactor public static void main string args for int i 2 i 100 i system.out.print i 的素數因子有 for int j 2 j2的素數因子有 3的素數因子有 4的素數因子有 2,5的素數...