用素数筛找素数,3000以内的素数够用了
#include<iostream>
#include<vector>
using namespace std;
const int n=3000;
vector<bool>isp(n,true);
int makeprime(){
for(int i=2;i<n;++i)
if(isp[i])
for(int j=2;i*j<n;++j)
isp[i*j]=false;
}
int getprime(){
static int pos=2;
while(!isp[pos++]);
return pos-1;
}
int main(){
makeprime();
int num;cin>>num;
cout<<num<<'=';
if(num==1) cout<<1;
//除num直到num为1
for(int k=getprime();num>1;k=getprime()){
int exp=0;
while(num%k==0){num/=k;++exp;}
if(exp){
static bool first_time=true;
if(!first_time)cout<<'*';
else first_time=false;
cout<<k;
if(exp>1)cout<<'^'<<exp;
}
}
return 0;
}