【素数】Eratosthenes筛选

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
int main()
{
    /*素数筛选*/
    /*Eratosthenes筛选*/
    /*确定某一个数是素数之后,删除这个数的所有的倍数*/
    int n;
    cin >> n;
    memset(vis, 0, sizeof(vis));
    for(int i = 2; i <= sqrt(n); i++)
        if(!vis[i])
            for(int j = i * i; j <= n; j += i)
                vis[j] = 1;

}

原文地址:https://www.cnblogs.com/Kohinur/p/9070855.html

时间: 2024-07-31 22:46:38

【素数】Eratosthenes筛选的相关文章

HDOJ/HDU 2710 Max Factor(素数快速筛选~)

Problem Description To improve the organization of his farm, Farmer John labels each of his N (1 <= N <= 5,000) cows with a distinct serial number in the range 1..20,000. Unfortunately, he is unaware that the cows interpret some serial numbers as be

每日一小练——Eratosthenes 筛选法

上得厅堂.下得厨房.写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:Eratosthenes筛选法 内容: 求质数是一个非常普遍的问题,通常不外乎用数去除.除到不尽时,给定的数就是质数. 可是早在2000年前人们就知道了一个不必用除法而找出2~N的全部质数的方法.如果一个非常奇妙的筛子,能够给出一个数.比如i,这个筛子有办法把i全部的倍数去掉. 请用这种方法求出2~N之间的全部质数.即Eratosthenes筛选法. 我的解法:上来没多想.打开vs2013就敲了起来.问题果然非常eas

Eratosthenes筛选法计算质数

<C和指针>第6章第4道编程题: 质数就是只能被1和本身整除的数.Eratosthenes筛选法是一种计算质数的有效方法.这个算法的第一步就是写下所有从2至某个上限之间的所有整数.在算法的剩余部分,遍历整个列表并剔除所有不是质数的整数. 后面的步骤是这样的.找到列表中的第1个不被剔除的数(也就是2),然后将列表后面所有逢双的数都剔除,因为它们都可以被2整除,因此不是质数.接着,再回到列表的头部重新开始,此时列表中第一个尚未被剔除的第1个数是3,所以在3之后把每逢第3个数(3的倍数)剔除.完成这

[经典算法] Eratosthenes筛选求质数

题目说明: 除了自身之外,无法被其它整数整除的数称之为质数,要求质数很简单,但如何快速的求出质数则一直是程式设计人员与数学家努力的课题,在这边介绍一个著名的 Eratosthenes求质数方法. 题目解析: 首先知道这个问题可以使用回圈来求解,将一个指定的数除以所有小于它的数,若可以整除就不是质数,然而如何减少回圈的检查次数?如何求出小于N的所有质数?首先假设要检查的数是N好了,则事实上只要检查至N的开根号就可以了,道理很简单,假设A*B = N,如果A大于N的开根号,则事实上在小于A之前的检查

Eratosthenes筛选法构造1-n 素数表

筛选法:对于不超过n的每个非负整数p,删除2p,3p,4p...当处理完所有数之后,还没没删除的就是素数. 代码中进行了相应的优化. 1 #include<bits/stdc++.h> 2 using namespace std; 3 int vis[10000]; 4 int main() 5 { 6 int n; 7 while(scanf("%d",&n)) 8 { 9 //-------------- 10 int m=sqrt(n+0.5); 11 mem

数组拷贝、数组函数、通过数组函数来模拟数据结构的栈和队列、回调的意义、数组函数的排序问题、算法以及寻找素数的筛选法

1.数组的拷贝数组拷贝时指针的指向问题. 数组在拷贝时,指针的位置随之复制[这一点拷贝是完全一样]但是如果拷贝的数组的指针是非法的,那么拷贝出新指针的位置进行初始化<?php$arr1=array('123');end($arr1);next($arr1);//这个指针非法$arr2 = $arr1;//这里进行数组的拷贝var_dump(current($arr2));//得到指向‘123’元素的指针var_dump(current($arr1));//此时这个数组的指针有问题?> 但是拷贝

素数高效率筛选法

无需多言直接上代码吧! 1 //Eratosthenes 筛法(埃拉托斯特尼筛法) 2 memset(check, false, sizeof(check)) 3 int tot = 0; 4 for(int i=2; i<=N; i++) 5 if(!check[i]) 6 { 7 prime[tot++] = i; 8 for(int j=i*2; j<=N; j+=i) 9 check[j] = true; 10 } 11 12 //Euler 筛法(欧拉筛法)--线性筛选 13 mem

HDOJ(HDU) 2138 How many prime numbers(素数-快速筛选没用上、)

Problem Description Give you a lot of positive integers, just to find out how many prime numbers there are. Input There are a lot of cases. In each case, there is an integer N representing the number of integers to find. Each integer won't exceed 32-

eratosthenes筛选法

写下从2至某个上限的之间的所有整数,在算法的剩余部分,你遍历整个列表并剔除所有不是质数的整数. 找到列表中的第一个不被剔除的整数(也就是2),然后将列表后面所有逢双的数都剔除,因为它们可以被2整除,接着,再回到列表头部重新开始,此时列表中尚未被剔除的第一个元素是3,所以在3之后把每逢第3个数剔除,再回到列表开头,以此类推,反复进行,最后列表中的未被剔除的全为质数. 先考虑实现最简单的这样一种功能,后面我们将改良这个算法: 1 #include<stdio.h> 2 #include<st