欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

1059. Prime Factors (25)--taste

发布时间:2024/1/1 编程问答 43 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。