HDOJ 1164 Eddy's research
上一篇已经讲了,但是转载别人的很乱,这里自己根据blog里面写的思路,重新写过了一个程序
1 #include <iostream> 2 #include <malloc.h> 3 #include <math.h> 4 #define N 65535 5 6 int primes[N]; 7 int SimpleDivsion()//生成1-65535之间所有的质数 8 { 9 int count=0; 10 int i,j; 11 //int *primes = (int *)malloc(sizeof(int)*n); 12 primes[count++]=2; 13 14 for(i=3;i<=65535;i++) 15 { 16 for(j=2;j<=(int)sqrt((double)i);j++)//这里要进行强制转换 17 { 18 if(i%j==0) 19 break; 20 } 21 if(j>(int)sqrt((double)i)) 22 { 23 primes[count++]=i; 24 } 25 } 26 return count; 27 //for(i=0;i<count;i++) 28 //printf("%d ",primes[i]); 29 //printf("\n"); 30 } 31 32 int main() 33 { 34 int test,i,count; 35 count=SimpleDivsion(); 36 while(scanf("%d",&test)!=EOF) 37 { 38 int flag=1; 39 i=0; 40 for(;i<count;i++) 41 { 42 if(test%primes[i]==0) 43 { 44 if(flag) 45 { 46 flag=0; 47 printf("%d",primes[i]); 48 } 49 else 50 printf("*%d",primes[i]); 51 test=test/primes[i]; 52 i=-1;//每次都要重新开始,为什么是-1.因为执行i++后就是0,有没有更好的方法? 53 //将if(test%primes[i]==0)这句话换成while(test%primes[i]==0)即可将i=-1去掉 54 } 55 if(test==1) 56 break; 57 } 58 printf("\n"); 59 } 60 }