NYOJ - 169 素数

素数

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

难度:1

描述

走进世博园某信息通信馆,参观者将获得前所未有的尖端互动体验,一场充满创想和喜悦的信息通信互动体验秀将以全新形式呈现,从观众踏入展馆的第一步起,就将与手持终端密不可分,人类未来梦想的惊喜从参观者的掌上展开。

在等候区的梦想花园中,参观者便开始了他们奇妙的体验之旅,等待中的游客可利用手机等终端参与互动小游戏,与梦想剧场内的虚拟人物Kr. Kong 进行猜数比赛。当屏幕出现一个整数X时,若你能比Kr. Kong更快的发出最接近它的素数答案,你将会获得一个意想不到的礼物。

例如:当屏幕出现22时,你的回答应是23;当屏幕出现8时,你的回答应是7;若X本身是素数,则回答X;若最接近X的素数有两个时,则回答大于它的素数。

输入

第一行:N 要竞猜的整数个数

接下来有N行,每行有一个正整数X

1<=N<=5 1<=X<=1000

输出

输出有N行,每行是对应X的最接近它的素数

样例输入

4

22

5

18

8

样例输出

23

5

19

7

来源

第三届河南省程序设计大赛

题目大意:求给出的数距离最近的素数,具体要求见题目。

我这边判断素数使用到的是孪生素数判断法,具体方法见:http://blog.csdn.net/code_pang/article/details/7880245


#include <iostream>
#include <cstdio>
using namespace std;
bool isPrime(int num)
{
    if(num==1)return false ;
    if(num==2||num==3)return true;
    if( num%6!=1 && num%6!=5)return false ;
    for(int i=5;i*i<=num;i+=6)
        if(num%i==0||num%(i+2)==0)
            return false;
    return true;
}

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        if(isPrime(n))
        {
            cout<<n<<endl;
            continue;
        }
        int ant=0;
        for(int j=1;j<100;j++)
        {
            if(isPrime(n+j))
            {
                if(isPrime(n-j))
                {
                    cout<<n+j<<endl;
                    ant=1;
                }
                else
                {
                    cout<<n+j<<endl;
                    ant=1;
                }
            }
            else if(isPrime(n-j))
            {
                cout<<n-j<<endl;
                ant=1;
            }
            if(ant==1)
                break;
        }
    }
    return 0;
}

仅代表个人观点,欢迎交流探讨,勿喷~~

PhotoBy:WLOP

http://weibo.com/wlop

时间: 2024-10-07 15:28:52

NYOJ - 169 素数的相关文章

[河南省ACM省赛-第三届] 素数 (nyoj 169)

#include <iostream> #include <cstdio> #include <queue> #include <cstring> #include <algorithm> #include <cmath> using namespace std; #define N 1100 #define INF 0x7fffffff bool prime[N]; void init() { memset(prime, true,

南阳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 488 素数环(深搜)

素数环 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环. 为了简便起见,我们规定每个素数环都从1开始.例如,下图就是6的一个素数环. 输入 有多组测试数据,每组输入一个n(0<n<20),n=0表示输入结束. 输出 每组第一行输出对应的Case序号,从1开始. 如果存在满足题意叙述的素数环,从小到大输出. 否则输出No Answer. 样例输入 6 8 3 0 样

nyoj 24 素数距离问题

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

NYOJ 22 素数求和问题

描述 现在给你N个数(0<N<1000),现在要求你写出一个程序,找出这N个数中的所有素数,并求和. 输入 第一行给出整数M(0<M<10)代表多少组测试数据 每组测试数据第一行给你N,代表该组测试数据的数量. 接下来的N个数为要测试的数据,每个数小于1000 输出 每组测试数据结果占一行,输出给出的测试数据的所有素数和 样例输入 3 5 1 2 3 4 5 8 11 12 13 14 15 16 17 18 10 21 22 23 24 25 26 27 28 29 30 样例输

NYOJ 1156 素数三元组【尝试题】

#include<stdio.h> int main() { int n; while(~scanf("%d",&n)) { if(n>=7) printf("3 5 7\n"); else printf("No triple\n"); } return 0; }

NYOJ 187 快速查找素数

快速查找素数 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数. 输入 给出一个正整数数N(N<=2000000) 但N为0时结束程序. 测试数据不超过100组 输出 将2~N范围内所有的素数输出.两个数之间用空格隔开 样例输入 5 10 11 0 样例输出 2 3 5 2 3 5 7 2 3 5 7 11 打一下表就可以了 #include<stdio.h> #include<m

NYOJ 快速查找素数

快速查找素数 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数. 输入 给出一个正整数数N(N<=2000000) 但N为0时结束程序. 测试数据不超过100组 输出 将2~N范围内所有的素数输出.两个数之间用空格隔开 样例输入 5 10 11 0 样例输出 2 3 5 2 3 5 7 2 3 5 7 11 #include<cstdio> #include<cstdlib>

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 恢复全局变量//回