素数筛 poj 3518

给你一个n

求包括n的一个非素数区间有多长 +1输出

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector>
#include<math.h>

using namespace std;
#define MAXN 1302000
bool pri[MAXN];

int main()
{
    memset(pri,0,sizeof(pri));

    for(int i=2;i<=1141;i++)
    {
        if(!pri[i])
            for(int j=i*i;j<=MAXN;j=j+i)
                pri[j]=1;
    }
    int n;

    while(scanf("%d",&n)!=EOF&&n)
    {
        int st=n,en=n;
        while(pri[st]==1)
            st--;
        while(pri[en]==1)
            en++;
        printf("%d\n",en-st);
    }

    return 0;
}
时间: 2024-10-07 15:57:56

素数筛 poj 3518的相关文章

POJ 2635 The Embarrassed Cryptographer (同余线性方程+素数筛)

题目地址:POJ 2635 先用素数筛把10^6万以内素数筛出来.然后把输入的那个大数转化成数组,并且每三位存成一个数,这样可以节约内存和时间,然后利用同余线性的原理,对那个小整数以内的所有素数枚举,然后判断是否整除,找到最小的能被整除的. 代码如下: #include <iostream> #include <string.h> #include <math.h> #include <queue> #include <algorithm> #i

POJ 3292 Semi-prime H-numbers (仿素数筛)

题目地址:POJ 3292 先利用素数筛的原理把H_prime筛出来,然后打表.要预处理,否则TLE. 代码如下: #include <iostream> #include <string.h> #include <math.h> #include <queue> #include <algorithm> #include <stdlib.h> #include <map> #include <set> #in

POJ 2262-Goldbach&#39;s Conjecture(素数筛)

Goldbach's Conjecture Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 39435   Accepted: 15119 Description In 1742, Christian Goldbach, a German amateur mathematician, sent a letter to Leonhard Euler in which he made the following conject

POJ 3126 Prime Path (bfs+欧拉线性素数筛)

Description The ministers of the cabinet were quite upset by the message from the Chief of Security stating that they would all have to change the four-digit room numbers on their offices. - It is a matter of security to change such things every now

素数筛 模板

1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 5 using namespace std; 6 7 int prim[3000000]={2,3,5}; 8 //素数是分为基本素数{2,3}.阳素数{6N+1,N>=1}形式的.阴素数{6N-1,N>=1}形式的 9 //为了代码的好写,在这里这样写的 : 10 //数除了{2,3,5}为素数,其他的数可以写成6N,6N+1

素数筛&amp;&amp;欧拉筛 BZOJ2818 Gcd BZOJ2190 [SDOI2008]仪仗队

折腾了一晚上很水的数论,整个人都萌萌哒 主要看了欧拉筛和素数筛的O(n)的算法 这个比那个一长串英文名的算法的优势在于没有多次计算一个数,也就是说一个数只筛了一次,主要是在%==0之后跳出实现的,具体的解释看的迷迷糊糊,特别是欧拉函数的求解 http://blog.csdn.net/lerenceray/article/details/12420725 代码如下 1 void ES(){ 2 for(int i=2;i<n;i++){ 3 if (!pd[i]){ 4 prime[++top]=

素数筛

这是我目前知道的打素数表最快的方法了----  差不多是O(n)的,100000以内花了0.005秒. 1 int prime[100005], np, vis[100005]; 2 3 void get_prime(int n){ 4 mset(prime); mset(vis); 5 np = 0; 6 for(int i = 2; i < n; i++){ 7 if(vis[i] != 1) 8 prime[np++] = i; 9 for(int j = 0, t; j < np &a

ACdream 1112 Alice and Bob (sg函数的变形+素数筛)

题意:有N个数,Alice 和 Bob 轮流对这些数进行操作,若一个数 n=a*b且a>1,b>1,可以将该数变成 a 和 b 两个数: 或者可以减少为a或b,Alice先,问谁能赢 思路:首先单看对每个数进行除法的操作,我们可以知道其实是在除以每个数的素因子或素因子之间的积 比如 70=2*5*7 我们可以变成 10(2*5)或 14(2*7) 或 35(5*7)或 2 或 5 或 7 或 1 这七种状态 当我们把他们(2,5,7)当作3个石子也就是一堆时,然而实际上我们是将这堆石子进行ni

最大公约数,最小公倍数,素数,素数筛

最大公约数 a.b的最大公约数是b,a%b的公约数,如果有一个等于0,最大公约数是a int gcd(int a,int n){ if (b==0) return a; else return gcd(b,a%b); } 或 return b!=0 ? gcd(b,a%b):a; 最小公倍数 是两数的乘积除以他们的最大公约数 素数筛 输出2-10000之间的所有素数 从2开始遍历,标记每个数的所有倍数为非素数 void sushu(){ for (int i=0;i<10000;i++){ ma