素数间隙

题目描述

Neko猫是一个很喜欢玩数字游戏的会说话的肥猫,经常会想到很多很好玩的数字游戏,有一天,它想到一个叫做素数间隙的游戏。据Neko猫的定义,素数间隙是两个相邻素数pq组成的开区间[p, q),所以素数间隙的长度就是q-p

例如711在素数表里是两个相邻的素数,所以711的素数间隙的长度为11-7,为4。 

现在Neko猫会给你很多个正整数K1K1299710),让你能立刻求出包含数字K的素数间隙的长度。为方便起见,如果K是素数,则输出0

输入

 

输入包含T组数据(1T1000),每组测试数据占一行,是一个正整数K1K1299710)。

输出

 

输出T行,每行一个非负数,这个非负数是包含输入数字K的素数间隙的长度,不应有其他字符出现在输出中。

示例输入

10
11
27
2
492170

示例输出

4
0
6
0
114

此题用到素数筛

#include <stdio.h>
#include <string.h>
#include <math.h>
int prime[1299710],b[1299710],a[1299710];
bool mark[1299710];
int main()
{
    int i,j,k,n,pos;
    memset(prime,0,sizeof(prime));
    memset(mark,false,sizeof(mark));
    memset(a,0,sizeof(a));
    k=1;
    mark[0]=mark[1]=true;
    for(i=2;i<=1299710;i++)
    {
        if(mark[i]==false)
        {
            prime[k++]=i;//把素数放进去
            a[i]=-1;//并且是素数就标记为-1
            for(j=2*i;j<=1299710;j+=i)
                mark[j]=true;//筛掉素数的倍数
        }
    }

    while(~scanf("%d",&n))
    {
        int p,q,sum,v;
        v=n;
        while(a[v]==0)
        {
            v++; //找比n大的素数
        }
        while(a[n]==0)
        {
            n--;//找比n小的素数
        }
        printf("%d\n",v-n);
    }
    return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值