zoukankan      html  css  js  c++  java
  • SDNU1522.陆历川学数学

    Description

    陆历川很热爱数学,最近他学了质数,他被质数深深的吸引,但是陆历川有个习惯,他喜欢给一些东西编号,所以他决定给所有的质数编号,例如给2编号1,3编号2,5编号3.....这样2,3,5就是质数里面的大当家,二当家和三当家了,陆历川现在知道了这些编号,现在他会给你一个数,他想知道这个数的所有的质因子里面的最大编号是多少?

    注:0和1的编号都是0;

    Input

    一个自然数N(0<=N<=1000000)

    多组输入样例

    Output

    最大编号

    Sample Input

    1

    2

    3

    4

    5

    Sample Output

    0

    1

    2

    1

    3

    这道题要用到埃氏筛,前面我发表过埃氏筛的模板,但是不能生搬硬套,因为此处的要求不一样。

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std;
    #define ll long long
    #define maxn 1000000+8
    ll tot,pri[maxn],s[maxn];
    bool is[maxn];
    void Eratosthenes()
    {
        tot=0;
        memset(is,1,sizeof(is));//定义is数组中所有数都为1;即假设所有数都为素数,方便后面筛出素数
        is[0]=is[1]=0;//数字0和1的素数都为0
        for(int i=2;i<maxn;i++)
        {
            if(is[i])//如果是素数的话,is[]肯定为1
            {
                pri[++tot]=i;//将素数存入pri数组中
                s[i]=tot;//储存编号
                for(ll j=i+i;i<maxn;j+=i)//筛出不是素数的数
                {
                    is[j]=0;
                    s[j]=tot;
                }
            }
        }
    }
    int main()
    {
        ll n;
        Eratosthenes()//埃氏筛在此处已经把从0到maxn的素数都筛选出来了,节省了程序运行的时间
        while(~scanf("%lld",&n))
        {
            printf("%lld
    ",s[n]);
        }
        return 0;
    }
  • 相关阅读:
    嵌入式驱动视频2019.03.24
    wps如何输入连续的长破折号
    python绘图问题
    2.13
    2.12
    2.10
    2.9
    2.8
    2.7
    2.5
  • 原文地址:https://www.cnblogs.com/RootVount/p/10022562.html
Copyright © 2011-2022 走看看