• 水题(素数表)NYOJ素数距离


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

    昨天刷题刷得很郁闷,去ACM贴吧逛了一下,发现很多水军,无聊刷了一题……

    真心坑,没想到我还WA了一下.因为我打的素数表没有考虑1的情况(我默认是true,导致1输出的是1 0)

    #include<iostream>
    #include<cstring>
    #include"math.h"
    using namespace std;
    #define N 1300001
    bool prime[N];
    void init(){
    	//打表
    	memset(prime,true,sizeof(prime));
       prime[1]=0;
       int sqrtN=sqrt(1.0*N)+1,i;
       for(i=2;i<sqrtN;i++){
    	   if(prime[i]){
    		
    		   for(int j=2*i;j<N;j+=i){
    			 prime[j]=false;
    	
    		   }
    		  
    	   
    	   }
       }
     
    }
    
    int main(){
    	init();
    	int cases,n;
    	int lf,rt;
    	
    	cin>>cases;
    	while(cases--){
    	   cin>>n;
    	   
    	   if(prime[n]){cout<<n<<" "<<0<<endl;continue;}
    	   lf=rt=1;
    	   while(1){
    		  
    		   if(n-rt>=2){ //真心觉得作者的左跟我的左很不一样。。难道是我喜欢倒数??...取小的
    			   if(prime[n-rt]){
    			     cout<<n-rt<<" "<<rt<<endl;
    			     break;
    			   } else rt++;
    		        
    		   }
    		    if(lf+n<N){
    			   if(prime[lf+n]==1){
    			     cout<<lf+n<<" "<<lf<<endl;
                     break;
    			   }else lf++;
    		   }
    	   
    	   }
    	
    	}
    	return 0;
    
    }



  • 相关阅读:
    10.RobotFramework: 获取当前时间戳
    9.接口自动化-自定义关键字、接口设计规范
    8.接口自动化-RequestLibrary库的介绍与示例讲解
    7.接口自动化-环境常用库搭建
    6.数据库操作(DatabaseLibrary)与常见问题
    5.远程服务器操作(SSHLibrary)
    概率密度与概率分布函数
    Linux安装包类型
    随机变量与随机过程
    hosts文件
  • 原文地址:https://www.cnblogs.com/dengyaolong/p/3697239.html
Copyright © 2020-2023  润新知