这个题还是有点迷,首先就是边界1=1这个1不是质数。。然后就是找质因子时我个人认为找到该数的开方为止即可,就是第18行哪里循环条件改成小于sqrt(n)+1。最后一个测试点就过不去。。。开始以为是sqrt不够精确导致,后面自己写sqrt函数还是过不去。如果有人明白原因欢迎指教
#include<cstdio>
#include<cmath>
using namespace std;
bool isprime(int t){
if(t==2) return 1;
int k=sqrt(t)+1;
for(int i=2;i<k;++i)
if(t%i==0) return 0;
return 1;
}
int main(){
int n,flag=0,m;
scanf("%d",&n);
printf("%d=",n);
m=n;
if(m==1) printf("1\n");
else
for(int i=2;i<=n;++i)
if(isprime(i)){
int k=0;
while(n%i==0){
n/=i;
k++;
}
if(k){
if(flag) printf("*%d",i);
else{
flag=1;
printf("%d",i);
}
}
if(k>1) printf("^%d",k);
}
return 0;
}
Given any positive integer N, you are supposed to find all of its prime factors, and write them in the format N = p1^k1* p2^k2 *…*pm^km.
Input Specification:
Each input file contains one test case which gives a positive integer N in the range of long int.
Output Specification:
Factor N in the format N = p1^k1 * p2^k2 *…*pm^km, where pi's are prime factors of N in increasing order, and the exponent ki is the number of pi -- hence when there is only one pi, ki is 1 and must NOT be printed out.
Sample Input:97532468Sample Output:
97532468=2^2*11*17*101*1291