小记:忘记n==1时break了。WA了一次
思路:先建一个素数表,然后对输入的数从第一个素数开始除,能除掉的就除掉,然后输出,直到最后输入的数除的只剩下1就可以退出了。
代码:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; #define N 100010 #define MAX 1000010 int p[MAX]; bool flag; int T, a, b, ans,n; int PrimeTable(int prime[])//打印素数表 { int pNum=0; prime[pNum++]=2; for(int i=3;i <= MAX ; i+=2) //奇偶法 { bool flag=true; for(int j=0;prime[j]*prime[j]<=i;j++) //根号法+递归法 if(!(i%prime[j])) { flag=false; break; } if(flag) prime[pNum++]=i; } return pNum; } int main() { T = PrimeTable(p); while(~scanf("%d",&n)) { flag = 0; for(int i = 0; i < T; ++i){ while(n%p[i]==0){ n/=p[i]; if(flag){ printf("*%d",p[i]); } else { flag =1; printf("%d",p[i]); } } if(n == 1)break; } printf("\n"); } return 0; }