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 }

 

posted on 2014-06-09 13:04  笑侃码农  阅读(152)  评论(0编辑  收藏  举报