博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
素数距离问题
阅读量:5245 次
发布时间:2019-06-14

本文共 1063 字,大约阅读时间需要 3 分钟。

描述现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。

如果输入的整数本身就是素数,则输出该素数本身,距离输出0

 
输入
第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000),
输出
每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。
样例输入
36810
样例输出
5 17 111 1

#include<iostream>

#include<cmath>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAX 1000010
int prime[MAX];

void Primes()

{
int i,j;
memset(prime,0,sizeof(prime));

prime[2]=1;

for(i = 3;i <= MAX;i++)
{
if(i % 2 == 0)
{
prime[i] = 0;
}
else
{
prime[i] = 1;
}
}
for(i = 3;i <= sqrt(MAX);i+=2)
{
if(prime[i])
{
for(j = i+i;j <=MAX;j += i)
{
prime[j] = 0;
}
}
}
}
int main(int argc, char* argv[])
{
int k;
Primes();
prime[0]=0;
prime[1]=0;
scanf("%d",&k);
while(k--)
{
int n;
int x,y;
x=0;
y=0;
scanf("%d",&n);
if(prime[n])
{
printf("%d %d\n",n,n-n);
}
else
{
x=n-1;
y=n+1;
while(prime[x]==0&&x>=0)
{
x--;
}
while(prime[y]==0)
{
y++;
}
if(x<0)
{
printf("%d %d\n",y,y-n);
}
else if(n-x<=y-n)
{
printf("%d %d\n",x,n-x);
}
else
{
printf("%d %d\n",y,y-n);
}
}
}
return 0;
}

转载于:https://www.cnblogs.com/52Cyan/p/3669465.html

你可能感兴趣的文章
【★】浅谈计算机与随机数
查看>>
C# Dynamic通用反序列化Json类型并遍历属性比较
查看>>
前台freemark获取后台的值
查看>>
Leetcode: Unique Binary Search Trees II
查看>>
C++ FFLIB 之FFDB: 使用 Mysql&Sqlite 实现CRUD
查看>>
Spring-hibernate整合
查看>>
c++ map
查看>>
exit和return的区别
查看>>
Django 相关
查看>>
git init
查看>>
训练记录
查看>>
IList和DataSet性能差别 转自 http://blog.csdn.net/ilovemsdn/article/details/2954335
查看>>
Hive教程(1)
查看>>
第16周总结
查看>>
C#编程时应注意的性能处理
查看>>
比较安全的获取站点更目录
查看>>
苹果开发者账号那些事儿(二)
查看>>
UVA11374 Airport Express
查看>>
P1373 小a和uim之大逃离 四维dp,维护差值
查看>>
NOIP2015 运输计划 树上差分+树剖
查看>>