void f(int num) { bool flag; for (int i = int(sqrt((double)num));i>1;i--) { if((num%i)==0) flag= false; } if(!flag) { for (int i = int(sqrt(num));i>1;i--) { if((num%i)==0) { f(i); num = num/i; f(num); break; } } } else printf("%d/t",num); } 1. 对于数num,找到一个能整除它的数m(小于sqrt(num)); 2. 如果有这样的m,对于m和num/m分别执行1; 3. 如果没有这样的m,则num已是质数,返回。 int main() { int i=2,j,k,N,flag=0,flag1=0; cout<<"请输入一个整数:"; cin>>N; while(1) //永远循环 { for (;i<=sqrt(N);i++) { if(N%i==0) //i肯定是质数,N肯定不是质数 { flag=1; flag1=1; cout<<i<<"×"; N=N/i; break ; } } if(flag) {flag=0;continue;} if(flag1) cout<<N<<endl; else cout<<N<<"是个质数,不能分解"<<endl; break; } return 0; }