#define N 100 int isprime[N]; int prime[N],pnum; void sieve(int n) { pnum=0; for(int i=0;i<n;i++) isprime[i]=1; isprime[0]=isprime[1]=0; int sqn=sqrt(n); for(int i=2;i<=sqn;i++) { if(isprime[i]) { prime[pnum++]=i; for(int j=i*i;j<n;j+=i) isprime[j]=0; } } for(int i=sqn+1;i<=n;i++) { if(isprime[i]) prime[pnum++]=i; } }
其他
int isprime[N]={1,1}; int sqn=sqrt(N); for(int i=2;i<=sqn;i++) { if(!isprime[i]) { for(int j=i*i;j<N;j+=i) isprime[j]=1; } }
int Prime[100], Pt; void Sieve() { Pt = 0; int i, j, mark[100] = {0}; Prime[Pt++] = 2; for(i = 3; i < 100; i += 2) { if(mark[i] == 0) { Prime[Pt++] = i; for(j = 3; i*j < 100; j += 2) mark[i*j] = 1; } } }質因數
#include <stdio.h> #include <math.h> #define M 1000 #define N 10000 int fact[M],count[M],fnum; int prime[N],isprime[N],pnum; void sieve() { int sqn=sqrt(N); isprime[0]=isprime[1]=1; for(int i=2;i<N;i++) { if(!isprime[i]) { for(int j=i+i;j<=N;j+=i) isprime[j]=1; } } pnum=0; for(int i=0;i<N;i++) { if(!isprime[i]) prime[pnum++]=i; } } void factorization(int n) { fnum=0; for(int i=0;i<pnum&&n>1;i++) { if(n%prime[i]==0) { fact[fnum]=i; count[fnum]=0; fnum++; while(n%prime[i]==0) { count[fnum-1]++; n/=prime[i]; } } } } int main() { sieve(); factorization(120); printf("%d = \n",120); for(int i=0;i<fnum;i++) printf("%d^%d\n",prime[fact[i]],count[i]); return 0; }
沒有留言:
張貼留言