zoukankan      html  css  js  c++  java
  • [C++]埃拉托色尼算法

     /*
    埃拉托色尼算法 
    问题描述:定义一个正整数n,求0-n范围以内的所有质数 
    @date 2017-03-06
    @author Johnny Zen   
    */ 
    #include<iostream>
    #include<math.h>
    using namespace std;
     
    void Eratosthenes(int arrs[],int n){   //arrs暂时设置为空指针,意为在返回目标数组(n范围内的所有质数数组) 
      int sqr,j;
      for(int i=2;i<n;i++){
        arrs[i] = i;     //目标数组初始化 
        sqr = sqrt(i);   //sqr 向下取整   注意:变量名sqr不能取名为sqrt,否则发生关键字冲突,无法编译! 
        for(int k = 2;k<=sqr;k++){   //因为: 在sqrt(i)以后的含小于sqrt(i)倍数关系的数据都已经被清除,剩下的均为质数 
          if(arrs[k]!=0){
            j = pow(k,2);
            while(j<=n){
              arrs[j] = 0;   //因数置0
              j = j+k;       //最为巧妙处: 加法   k*k   k*(k+1)    k*(k+2)  ----k*(k+n) 
            }
          }
        }
      }
      //输出
      for(int i = 2;i<n;i++)
        if(arrs[i]!=0)
          cout<<arrs[i]<<' '; 
     
    int main(){
      int n,*arrs;
      cout<<"请输入数N:";
      cin>>n;
      arrs = new int[n];  //创建数组 
      
      Eratosthenes(arrs,n);
      
      delete [] arrs; 
      return 0;
  • 相关阅读:
    倍增_ST表与LCA
    树状数组
    CF1365B 题解
    左偏树
    ES5_04_Array扩展
    ES5_03_Object扩展
    ES5_05_Function扩展
    前台样式与实际开发应用
    利用Mircosoft URLRewriter.dll实现页面伪静态(伪静态系列一)
    递归算法常见习题代码(控制台程序)
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/7155194.html
Copyright © 2011-2022 走看看