分解素因子
Description
假设x是一个正整数,它的值不超过65535(即1<x<=65535),请编写一个程序,将x分解为若干个素数的乘积。
Input
输入的第一行含一个正整数k (1<=k<=10),表示测试例的个数,后面紧接着k行,每行对应一个测试例,包含一个正整数x。
Output
每个测试例对应一行输出,输出x的素数乘积表示式,式中的素数从小到大排列,两个素数之间用“*”表示乘法。
Sample Input
2 11 9828
Sample Output
11 2*2*3*3*3*7*13
解答:这个题我的思路:因为给的数不大,所以可以遍历,我是用除数i(全部都是素数)来遍历的,如果可以整除n,则输出这个数,并且试探i可不可以重复去除,直到不能除,则增加继续去试探,最后将n除尽。
#include"iostream" #include"math.h" using namespace std; int isPrime(int n) { int i,flag=1; for(i=2;i<n;i++) { if(n%i==0) { flag=0; break; } } if(flag==1) return 1; else return 0; } int main() { int k,n,i,first,temp; cin>>k; while(k--) { cin>>n; first=0; temp=n; if(isPrime(n)) { cout<<n<<endl; continue; } for(i=2;i<temp;) { if(!isPrime(i)) { i++; // continue; } else { if(n%i!=0) { i++; // continue; } else { n=n/i; if(first==0) { cout<<i; first=1; } else { cout<<"*"<<i; } } } } cout<<endl; } return 0; }