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;
  • 相关阅读:
    windows下wchar_t* 转char*
    VS2010的调试参数/Zi /DEBUG
    fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'X86'
    使用opencv传中文文件崩溃
    【20160924】GOCVHelper综述
    编译ITK
    几款开源图像处理软件评测研究
    新注册域名greenopen.site,向专业道路进军
    openmp在图像处理上面的运用
    实现multbandblend
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/7155194.html
Copyright © 2011-2022 走看看