hdu 1164 Eddy's research I 解题
题意是给一个数字,让你把它的质数因子输出。
这个很简单,直接素数打表后一个一个试就行。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 #include<algorithm> 6 #include<queue> 7 #include<vector> 8 #include<stack> 9 #include<map> 10 #include<set> 11 #include<cmath> 12 #include<cctype> 13 #include<ctime> 14 15 using namespace std; 16 17 bool visit[101000]; 18 int prime[100000]; 19 20 void init_prim() //高效素数打表 21 { 22 memset(visit,true,sizeof(visit)); 23 int num=0; 24 for(int i=2;i<=65535;++i) 25 { 26 if(visit[i]==true) 27 { 28 num++; 29 prime[num]=i; 30 } 31 for(int j=1;((j<=num)&&(i*prime[j]<=65535));++j) 32 { 33 visit[i*prime[j]]=false; 34 if(i%prime[j]==0) break; 35 } 36 } 37 } 38 39 int main() 40 { 41 memset(prime,0,sizeof(prime)); 42 int count=0; 43 init_prim(); 44 int n; 45 while(scanf("%d",&n)!=EOF) 46 { 47 int m=1; 48 for(int i=0;i<6542;i++) 49 { 50 if(n%prime[m]!=0) m++; 51 else 52 { 53 printf("%d",prime[m]); //先弹出一个 54 n/=prime[m]; 55 break; 56 } 57 } 58 for(int i=0;i<6542;i++) 59 { 60 if(n%prime[m]!=0) m++; 61 else 62 { 63 printf("*%d",prime[m]); //然后依次弹出*和数字 64 n/=prime[m]; 65 } 66 if(n<prime[m]) break; 67 } 68 printf("\n"); 69 } 70 return 0; 71 }