生活随笔
收集整理的這篇文章主要介紹了
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的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。