• 线性筛法证明


    判断素数(2)

    TimeLimit:2500MS  MemoryLimit:128MB
    64-bit integer IO format:%lld
     
    Problem Description

    输入一个数n(2<=n<=10^7),输出它是否是素数。如果是,输出Yes,否则输出No。

    Input

    多组测数据(T<=10^6),每组有一个数字 n(2<=n<=10^7)。

    数据量较大,建议使用scanf 进行读入。

    Output

    每个测试数据输出”Yes”或”No”(不包含引号)

    SampleInput
    2
    3
    4
    5
    SampleOutput
    Yes
    Yes
    No
    Yes

    推导证明:
    假设c=a*b
    可以存在向上筛掉c*b
    此时c%b==0
    如果不跳出
    存在另一个素数d
    c*d=(a*b*d)=(a*d)*b
    此时可得a*d>c
    那么存在向下循环
    会重复筛去a*d*b
    为什么会是c%b==0结束呢
    取余等于0的情况下
    =(a*b)*b(调换位置)依旧=(a*b)*b
    不会出现大于的情况
    小于的情况(e<b)
    =(a*b)*e=(a*e)*b
    (a*e)<(a*b)
    所以(a*e)在(a*b)前面,所以应该先跑过了
    i对应c
    prime[j]对应素数数组

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    const int MAXN = 1e7+5;
    int vids[MAXN],prime[MAXN];
    /**
    推导证明:
    假设c=a*b
    可以存在向上筛掉c*b
    此时c%b==0
    如果不跳出
    存在另一个素数d
    c*d=(a*b*d)=(a*d)*b
    此时可得a*d>c
    那么存在向下循环
    会重复筛去a*d*b
    为什么会是c%b==0结束呢
    取余等于0的情况下
    =(a*b)*b(调换位置)依旧=(a*b)*b
    不会出现大于的情况
    小于的情况(e<b)
    =(a*b)*e=(a*e)*b
    (a*e)<(a*b)
    所以(a*e)在(a*b)前面,所以应该先跑过了
    i对应c
    prime[j]对应素数数组
    **/
    void primes()
    {
        int i,j,temp,top;
        top=0;
        memset(vids,0,sizeof(vids));
        for(int i=2;i<MAXN;i++)
        {
            if(!vids[i])
            {
                prime[top++]=i;
            }
            for(int j=0;prime[j]*i<MAXN;j++)
            {
                vids[prime[j]*i]=1;
                if(i%prime[j]==0)
                    break;
            }
        }
    }
    int main()
    {
        primes();
        int n;
        while(~scanf("%d",&n))
        {
            if(vids[n]==0)
                printf("Yes
    ");
            else
                printf("No
    ");
        }
        return 0;
    }
  • 相关阅读:
    Linked List Cycle
    黑白多帧相机设置白平衡原理
    cefsharp+elementplus
    Vue3(1)
    [Leetcode Weekly Contest]272
    [Leetcode Weekly Contest]273
    [Leetcode Weekly Contest]283
    ikbc104键键盘的win键失效的解决办法
    pytest接口自动化学习
    阿凡达项目的严重问题,质量过程改进,敏捷开发,
  • 原文地址:https://www.cnblogs.com/qq136155330/p/9328051.html
Copyright © 2020-2023  润新知