nyoj 素数距离

素数距离问题

时间限制:3000 ms  |  内存限制:65535 KB

难度:2

描述
现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0
输入
第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000),
输出
每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。
样例输入
3
6
8
10
样例输出
5 1
7 1
11 1

#include <iostream>
#include <cmath>
using namespace std;

bool is_Primer(int x)
{
if(x<2)
return false;
for(int i=2;i<=sqrt(x);++i)
if(x%i==0)
return false;

return true;
}

int main()
{
int n;
cin>>n;
while(n--)
{
int x;
cin>>x;
if(x==1)
{
cout<<"2"<<" "<<"1"<<endl;
continue;
}
if(x==0)
{
cout<<"2"<<" "<<"2"<<endl;
continue;
}
if(is_Primer(x))
{
cout<<x<<" "<<"0"<<endl;
continue;
}

int left;
for(int i=x-1;i>1;--i)
if(is_Primer(i))
{
left=i;
break;
}

int right;
for(int i=x+1;;++i)//不要加循环终止条件,因为题目没有说最小的值是多少,加了就wronganswer。。。一个大神给我指导的,
if(is_Primer(i))
{
right=i;
break;
}

if(right-x<x-left)
cout<<right<<" "<<right-x<<endl;
else if(right-x>=x-left)
cout<<left<<" "<<x-left<<endl;
}
return 0;
}

原文地址:https://www.cnblogs.com/tianzeng/p/8947343.html

时间: 2024-11-06 16:22:21

nyoj 素数距离的相关文章

nyoj 24 素数距离问题

素数距离问题 时间限制:3000 ms  |            内存限制:65535 KB 难度:2 描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距离长度素数,则输出左侧的值及相应距离. 如果输入的整数本身就是素数,则输出该素数本身,距离输出0 输入 第一行给出测试数据组数N(0<N<=10000) 接下来的N行每行有一个整数M(0<M<1000000), 输出 每行输出两个整数 A B. 其中A表示离相应测试数据最近的

素数距离问题

素数距离问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距离长度素数,则输出左侧的值及相应距离. 如果输入的整数本身就是素数,则输出该素数本身,距离输出0 输入 第一行给出测试数据组数N(0<N<=10000) 接下来的N行每行有一个整数M(0<M<1000000), 输出 每行输出两个整数 A B. 其中A表示离相应测试数据最近的素数,B表示其间的距

南阳oj 语言入门 素数 题目169 素数距离 题目24

 素数  题目169 #include<stdio.h> #include<math.h> int main(){ int prime(int a); int i,j,n,rd,ld,p; scanf("%d",&n); while(n--){ int num,lnum,rnum; scanf("%d",&num); if(num==1){ printf("2\n"); continue; } p=pr

nyOJ基础题:素数距离

//一次性全部生成完,想用多少用多少,时间长点#include <iostream> #include<stdio.h> char min(char a, char b){ return (a>b)?b:a;} char max(char a, char b){ return (a>b)?a:b;} void swapIntOrChar(int a, int b){ a^=b^=a^=b;} bool isPrime(int n){ if(n==1) return fa

NYOJ_24 素数距离问题

题目地址 难度:2. 分析: 本题思想很简单,循环num次,每次输入一个数判断是否是素数,再计算最近的素数和距离. 不过第一遍写完提交AC不了.仔细阅读提示,觉得是边界条件没有考虑清楚. 最后输入测试数据  n= 1  发现输出是 0 1 . 也就是我判断素数的时候没有考虑输入0的情况. 心得: 1.注意边界条件 2.能return就直接return,不要赋值之后再return.见下面分析. #include<iostream> #include<math.h> using nam

NYoj 素数环(深搜入门)

题目链接: http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=488 深搜模板: 1 void dfs(int 当前状态) 2 { 3 if(当前状态为边界状态) 4 { 5 记录或输出 6 return; 7 } 8 for(i=0;i<n;i++) //横向遍历解答树所有子节点 9 { 10 //扩展出一个子状态. 11 修改了全局变量 12 if(子状态满足约束条件) 13 { 14 dfs(子状态) 15 } 16 恢复全局变量//回

ZJNU 1223 - 素数距离——高级

因为最大可以达到int极限 明显直接筛选不可能完成 所以从其因子入手 因为任何不是素数的数都有除了1与其自身之外的因子 因此,我们筛出2^(31/2)≍46350之内的所有素数,以其作为因子再将题目给定区间内的所有不是素数的数标记排除 然后将素数存放在prnum这个vector集合中便于调用 在排除阶段,可以用 l=((L+prnum[i]-1)/prnum[i])*prnum[i] 计算出区间内的第一个是prnum[i]的倍数的数 注意,如果计算出来的使其本身,取倍数 再用 r=R/prnum

NYOJ 26 孪生素数问题

孪生素数问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 写一个程序,找出给出素数范围内的所有孪生素数的组数.一般来说,孪生素数就是指两个素数距离为2,近的不能再近的相邻素数.有些童鞋一看到题就开始写程序,不仔细看题,咱们为了遏制一下读题不认真仔细的童鞋,规定,两个素数相邻为1的也成为孪生素数. 输入 第一行给出N(0<N<100)表示测试数据组数. 接下来组测试数据给出m,表示找出m之前的所有孪生素数. (0<m<1000000) 输出 每组测试

南阳ACM24-素数距离问题

/* 素数距离问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右 有等距离长度素数,则输出左侧的值及相应距离. 如果输入的整数本身就是素数,则输出该素数本身,距离输出0 输入 第一行给出测试数据组数N(0<N<=10000) 接下来的N行每行有一个整数M(0<M<1000000), 输出 每行输出两个整数 A B. 其中A表示离相应测试数据最近的素数,B表示