找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3611|回复: 0

求0-2000内的所有质数(筛选法)

[复制链接]
发表于 2012-1-20 11:21:36 | 显示全部楼层 |阅读模式
核心算法:

我们先设保存整数0~N的数组为sieve[N+1],用“逐步求精”的方法来得出算法:
[定理1]若比素数P小的所有素数的倍数均已从sieve中删去,且P*P > N,则sieve = primes(2…N)。其中:primes(2..N)表示2..N之间所有的素数。
引用:http://blog.csdn.net/zzjjzzgggg/article/details/2493957

Code://Func.h
  1. #include "stdafx.h"
  2. #include <iostream>
  3. using std::cout;
  4. using std::endl;
  5. void PrintNums(int num)
  6. {
  7.         bool *arr=new bool[num];
  8.         //初始化数组
  9.         for(int i=0;i<num;i++)
  10.         {
  11.                 arr[i]=true;
  12.         }
  13.         //去非素数
  14.         for(int i=2;i<=num;++i)
  15.         {
  16.                 if(arr[i-1]==true)
  17.                 {
  18.                         for(int j=2*i;j<=num;j+=i)
  19.                         {
  20.                                 arr[j-1]=false;
  21.                         }
  22.                 }
  23.         }
  24.         //打印素数
  25.         for(int i=0;i<num;i++)
  26.         {
  27.                 if(arr[i]==true)
  28.                 {
  29.                         cout<<i+1<<endl;
  30.                 }
  31.         }
  32. }
复制代码


作者:xufei96 发表于2012-1-20 10:10:28 原文链接

您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-5-2 18:32 , Processed in 0.012495 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表