1、最大素因子
#include<stdio.h>
#define max 1000010
int a[max]={0};
void num_prime()
{
int i,j,x=0;
for(i=2;i<max;i++)
{
if(!a[i])
{
x++;
for(j=i;j<max;j=j+i) //素数的整倍数的最大素因子可能是该素数
a[j]=x; //更新素数对应的出现的次序
}
}
}
int main()
{
num_prime();
int n;
while(scanf("%d",&n)!=EOF)
printf("%d\n",a[n]);
return 0;
}
2、快速查找素数
#include <stdio.h>
#include <stdlib.h>
int a[2000001];
void seek()
{
int i,j;
for(i=2;i<1000000;i++)
{
if(!a[i])//关键!已经赋值过1就不需要重复遍历了,否则就超时!!!
for(j=2;i*j<=2000000;j++)
a[i*j] = 1;//i*j意味着此数肯定不是素数!
}
}
int main()
{
seek();
int n,i;
while(scanf("%d",&n)!=EOF && n)
{
for(i=2;i<=n;i++)
{
if(!a[i])
printf("%d ",i);
}
printf("\n");
}
return 0;
}
今天第一次用筛选法解决大数问题,觉得这个方法很灵性啊,是的给赋个值,不是的为零,最后把为零的输出就完了。