zoukankan      html  css  js  c++  java
  • 素数判断和素数筛(简单方便)

    一个数是不是素数就要看它能否被另一个大于1且小于本身的数整除即可;

    我们在寻找素数的过程中发现了素数的一个性质:

    素数:————>分布在6的两侧(2,3是特殊情况要特判)

    证明:6x %6==0

      6x+1

      (6x+2)%2==0     

      (6x+3)%3==0

      (6x+4)%2==0

      6x+5

    但是这是一个必要条件:是素数则有这个性质,因为存在(6x+1)*(6x+5)这样的素数也满足这样的条件,所以在下列if 判断语句后还有for循环进行另一步判断

    #include<iostream>
    #include<cmath>
    using namespace std;
    
    bool Isprime(int num)
    {
        if(num<=3)return num>1;//特判1,2,3
        if(num%6!=1&&num%6!=5)//是否位于6两侧,既不在六的左边也不在六的右边注意用&&。
        return false;
        int eps=sqrt(num);
        for(int i=5;i<=eps;i+=6)//是否能被素数整除;一定是<= 。。。。不然会出错;例如323
            if(num%i==0||num%(i+2)==0)//能被六左侧数整除或者被六右侧数整除注意用||。
            return false;
    
        return true;
    }

     Eratosthenes筛法

    int v[MAXN];
    void primes(int n)
    {
        memset(v,1,sizeof(v));//
        v[0]=0,v[1]=0;
        for(int i=2;i<=n;i++)
        {
            if(!v[i])continue;
                for(int j=i;j<=n/i;j++)
                    v[i*j]=0;//合数是0
        }
    }

    从二开始,是合数则跳过,否则就从i^2开始枚举标记合数,从i^2开始枚举,因为i^2以下的数都已经被枚举过

  • 相关阅读:
    WCF双工通讯以及客户端间的间接通讯
    认识IoC
    学习“迷你ASP.NET MVC框架”后的小结
    MVP的PV模式与SC模式
    Android学习笔记(九) 视图的应用布局效果
    C# 动态编译
    C#中协变与抗变(逆变)
    线程池ThreadPool的初探
    关于异步的初步认识
    仿Office的程序载入窗体
  • 原文地址:https://www.cnblogs.com/zwx7616/p/11260247.html
Copyright © 2011-2022 走看看