生活随笔
收集整理的这篇文章主要介绍了
1059. Prime Factors (25)--taste
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
点击打开链接
注意:
1.对于输入为1的情况要特判
2.factor在int范围内开到10就足够
3.sqrt是范围,由于n后面被修改故范围要单写,且sqrt是double
int sqr=sqrt(1.0*n);
4.按照prime中的素数寻找时,当n==1是要退出
5.对于本身是素数的寻找过程,由于寻找范围只在sqrt内,因此循环过程后n不变,因此要特判
#include <cstdio>
#include <math.h>
#define MAX 100000
int prime[MAX];
bool p[MAX]={0};
int cnt=0;
void findp(){for(int i=2;i<MAX;i++){if(p[i]==false){prime[cnt++]=i;for(int j=i+i;j<MAX;j+=i){p[j]=true;}}}
}
struct factor{int x,cnt;factor(){x=1;cnt=0;}
}fac[10];
int main(){freopen("in.txt","r",stdin);findp();int n;while(scanf("%d",&n)!=EOF){//立刻打印,后面n变了if(n==1){printf("1=1\n");}else{//遍历次数要单独写,因为后面n会变化//sqrt中时double,因此要写成sqrt(1.0*n)printf("%d=",n);int sqr=(int)sqrt(1.0*n);int facnt=0;for(int i=0;prime[i]<sqr && i<cnt;i++){if(n%prime[i]==0){fac[facnt].x=prime[i];while(n%prime[i]==0){fac[facnt].cnt++;n/=prime[i];}facnt++;}//及时退出,节省时间if(n==1){break;} }//对于本身是质因数的数字上述过程后,n不发生变化,因此只要写入n即可if(n!=1){fac[facnt].x=n;fac[facnt].cnt=1;facnt++;}for(int i=0;i<facnt-1;i++){if(fac[i].cnt==1){printf("%d*",fac[i].x);}else{printf("%d^%d*",fac[i].x,fac[i].cnt);}}if(fac[facnt-1].cnt==1){printf("%d\n",fac[facnt-1].x);}else{printf("%d^%d\n",fac[facnt-1].x,fac[facnt-1].cnt);}}}return 0;
}
总结
以上是生活随笔为你收集整理的1059. Prime Factors (25)--taste的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。