- int table[14094]={
- 2,3,5,7,11,13,17,19,23,
- 25,29,31,35,37,41,43,47,49,53,
- 59,61,67,71,73,77,79,83,89,91,
- 太多了贴不上
- 65369,65371,65377,65381,65383,65389,65393,65399,65407,65411,
- 65413,65419,65423,65431,65437,65441,65447,65449,65453,65459,
- 65467,65473,65477,65479,65489,65491,65497,65501,65503,65507,
- 65509,65519,65521,65531,65533,};
- int defact(int n,int factor[],int num)
- {
- int co=0;
- int mark;
- while(n>1) {
- mark=0;
- for(int i=0;i<14094;i++) {
- if(n%table[i]==0) {
- n/=table[i];
- mark=1;
- if(co >= num) return -1;
- factor[co++]=table[i];
- break;
- }
- }
- if(!mark) {
- if(co >= num) return -1;
- factor[co++]=n;
- break; //这轮没找到因子
- }
- };
- return co;
- }
复制代码
这个我觉得最快了,上面是计算到65536的质数表,计算时只需要除每个质数就可以了,除的尽就是银子。这个算法适合计算量大的场合。少量计算就不要搞那么大的表了吧。 |