刚开始质数打表,范围搞大了,弄成了1~n,第一个点15点超时了
大于根号n的质数只有一个,若有两个乘积就大于n了,完全可以把表打到根号n
若有剩余的一个大于根号n的质因子再额外讨论
ps:这里1要输出1=1,有个2分测试点
#include<iostream>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
vector<int> prime;
int n;
//1~sqrt(n)范围质数打表
bool IsPrime(int n){
if(n == 2) return true;
int sqr = (int)sqrt(1.0*n);
for(int i = 2; i <= sqr; i++){
if(n % i == 0) return false;
}
return true;
}
void GetAllPrime(int n){
int sqr = (int)sqrt(1.0*n);
for(int i = 2; i <= sqr; i++){
if(IsPrime(i)) prime.push_back(i);
}
}
int main(){
cin>>n;
if(n == 1){
printf("1=1");
return 0;
}
GetAllPrime(n);
int temp = n;
printf("%d=",n);
int flag = 0;
for(int i = 0; i < prime.size(); i++){
int count = 0;
while(temp % prime[i] == 0){
count++;
temp /= prime[i];
}
if(count != 0 && flag == 1) printf("*");
if(count > 1){
printf("%d^%d",prime[i],count);
flag = 1;
}
else if(count == 1){
printf("%d",prime[i]);
flag = 1;
}
}
if(temp != 1){
if(flag == 1){
printf("*%d",temp);
}
else{
printf("%d",temp);
}
}
return 0;
}