#include<stdio.h> #include<stdlib.h> int mark[50000], prime[50000], Pt = 0; void sieve (){ int i, j; for(i = 2; i <50000; i++) { if(mark[i] == 0) { prime[Pt++] = i; for(j = 2; j*i<50000; j++) mark[j*i] = 1; } } } int main(){ sieve(); int n,i; scanf("%d",&n); printf("%d=",n); int tmp=n; int p[200],pow[200],top=0; for(i=0;prime[i]*prime[i]<tmp&&n;i++){ if(n%prime[i]==0){ p[top]=prime[i],pow[top]=0; while(n%prime[i]==0){ n=n/prime[i]; pow[top]++; } top++; } } if(top==0) printf("%d^1",n); else{ printf("%d^%d",p[0],pow[0]); for(i=1;i<top;i++) printf("*%d^%d",p[i],pow[i]); } puts(""); return 0; }
這是許沁憲簡化版本的質因數分解
#include<stdio.h> #include<stdlib.h> int main() { int flag; int g,num,i,n,x; int p[100],pow[100],nc=0; scanf("%d",&num); printf("%d=",num); n=num; for(i=0;num%2==0;num=num/2,i++); if(i>0) p[nc]=2,pow[nc]=i,nc++; for(g=3;g*g<=n && g<=num;g=g+2){ for(i=0;num%g==0;i++,num=num/g); if(i>0) p[nc]=g,pow[nc]=i,nc++; } if(num!=1) p[nc]=num,pow[nc]=1,nc++; for(i=0;i<nc;i++){ if(i!=0) printf("*"); printf("%d^%d",p[i],pow[i]); }printf("\n");system("pause"); }
沒有留言:
張貼留言