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以下的数都已经被枚举过

  • 相关阅读:
    第六章:面向对象(下)
    第四章:流程控制和数组
    第三章:数据类型和运算符
    第二章:理解面向对象
    数据库:表设计阶段
    第一章:java语言概述与开发环境
    HTML DOM
    补漏
    不错的资源哦
    阻止事件冒泡
  • 原文地址:https://www.cnblogs.com/zwx7616/p/11260247.html
Copyright © 2011-2022 走看看