zoukankan      html  css  js  c++  java
  • 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的为合数

    完毕。

    一道又一道,好高兴!
  • 相关阅读:
    awk实例
    imagemagick imagick
    sort 命令
    cut 命令
    tr命令
    uniq
    多线程编程之Linux环境下的多线程(一)
    多线程编程之Windows同步方式
    多线程编程之数据访问互斥
    多线程编程之基础概念
  • 原文地址:https://www.cnblogs.com/laiba2004/p/3249638.html
Copyright © 2011-2022 走看看