nyoj169-素数

  1. 素数

    时间限制: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
    来源
    第三届河南省程序设计大赛
    上传者
    张云聪
    解答:


  2. #include<iostream>  
  3. #include<string.h>  
  4. #include<stdio.h>  
  5. #include<algorithm>  
  6. using namespace std;      
  7. int main()  
  8. {  
  9.     int a[1100],i,j;  
  10.     memset(a,0,sizeof(a));  
  11.     a[1]=1;  
  12.     for(i=2;i<=1090;++i)     //筛素数法   
  13.     {  
  14.         for(j=i+i;j<=1090;j+=i)  
  15.            a[j]=1;  
  16.     }  
  17.     int t,x;  
  18.     //cin>>t;  
  19.     scanf("%d",&t);  
  20.     while(t--)  
  21.     {  
  22.         //cin>>x;  
  23.         scanf("%d",&x);       
  24.         if(a[x]==0)  
  25.         {  
  26.             //cout<<x<<endl;  
  27.             printf("%d ",x);  
  28.         }  
  29.         else  
  30.         {  
  31.             int max,min;  
  32.             for(i=x;;i++)  
  33.             {  
  34.                 if(a[i]==0)  
  35.                 {  
  36.                     max=i;  
  37.                    break;  
  38.                 }  
  39.                                     
  40.             }  
  41.             for(i=x;;i--)  
  42.             {  
  43.                 if(a[i]==0)  
  44.                 {  
  45.                    min=i;           
  46.                    break;  
  47.                 }  
  48.             }  
  49.             if((max-x)<=(x-min))  
  50.               
  51.               //cout<<max<<endl;  
  52.               printf("%d ",max);  
  53.                 
  54.             else  
  55.               
  56.               //cout<<min<<endl;  
  57.               printf("%d ",min);  
  58.                 
  59.         }  
  60.     }     
  61.     return 0;  
  62. }   
原文地址:https://www.cnblogs.com/aerer/p/9931143.html