题目梗概:求1000000以内任意数的最大质因数是第几个素数,其中 定义 1为第0个,2为第1个,以此类推。
#include<string.h> #include<stdio.h> #include<math.h> int a[1000010],b[1000010],c[1000010];//b[i]表示i是第几个素数,c[k]表示k的最大素数是c[k],a[i]表示是不是素数 int main() { int n,i,num,j; memset(a,0,sizeof(a)); a[0]=1; b[1]=0; num=1; for(i=2;i<1000005;i++)//筛选法求素数 { if(a[i]==0) { for(j=i+i;j<1000005;j=j+i) { a[j]=-1;//不是素数置-1 c[j]=i; } b[i]=num++; c[i]=i; } } while(scanf("%d",&n)!=EOF) { printf("%d ",b[c[n]]); } return 0; }
扩展:
筛选法求(1~n内的)素数简介:
1:范围内所有数置0;
2:1置-1;
2:2的倍数置-1(除去2本身);
3:3的倍数置-1(除去3本身);
4:5的倍数置-1(除去5本身);
5:7的倍数置-1(除去7本身);
6:11的倍数置-1(除去11本身);
7:下一个未置-1的整数置-1(除去自己本身)……直到n;
Ps:(1):上述步骤都不要超出范围1~n;(2):最后仍置0的为素数,置-1的为合数
完毕。