HDU 2136 Largest prime factor(查找素数,筛选法)

题目梗概:求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;
}

        
View Code

扩展:

筛选法求(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的为合数

完毕。

一道又一道,好高兴!
原文地址:https://www.cnblogs.com/laiba2004/p/3249638.html