先上原理
对于一个非素数来说
1,所有质因子小于等于sqrt(n)
2,只存在一个大于sqrt(n)的质因子,其他质因子都小于sqrt(n)
至于证明,可以用反证法。
若是有多余一个大于sqrt(n)的质因子,这些因子的乘积.....
下面上代码
这里借助一个结构体,当然你也可以用数组
struct factor { int x;//记录素因子 int cnt;//素因子的个数 }fac[10];
2 3 5 7 11 13 17 19 23 29
以上10个素数的乘积已经超过了int的表示范围
故而结构体数组只开了10个
int prime_num;//质因子的个数 void prime_fac(int n) { for(int i=0;i<=sqrt(n);i++) { if(n%prime[i]==0) { fac[prime_num].x=prime[i]; while(n%prime[i]==0) { fac[prime_num].cnt++; n=n/prime[i]; } prime_num++; } } if(n!=1) { fac[prime_num].x=n; fac[prime_num].cnt=1; prime_num++; } }
该函数执行结束,fac结构体数组中就是质因子的分解结果
原文地址:https://www.cnblogs.com/lxzbky/p/12507541.html
时间: 2024-10-26 13:53:02