NYOJ 24 素数距离问题
2014-09-29 17:23
323 查看
素数距离问题
[align=center]时间限制:3000 ms | 内存限制:65535 KB[/align][align=center]难度:2[/align]
描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0
输入第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000),输出每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。样例输入
3 6 8 10
样例输出
5 1 7 1 11 1
JAVA代码:
/* * 搜索最小素数距离,优先级分析: * 1、判断输入的是否为素数,是素数输出 * 2、判断左侧最近素数 * 3、判断右侧最近素数 * * 特例需注意,数字1不是素数 * */ package org.oj; import java.util.Scanner; public class Main { //判断素数 private boolean is_prime(int x){ if(x>1){ if(x<4){ // 2,3 素数 return true; }else{ for(int i=2;i<=Math.sqrt(x);i+=1){ if(x%i==0) return false; } return true; } } return false; } public static void main(String[] args) { Scanner scan=new Scanner(System.in); Main nyoj=new Main(); int n=scan.nextInt(); //组数 for(int i=0;i<n;i++){ int m=scan.nextInt(); if(m<0) break; if(nyoj.is_prime(m)){ System.out.println(m+" "+0); continue; } // 距离 int d=(m%2==0)?1:0; //特例:1 不是素数 if(m==1){ System.out.println("2 1"); }else{ while(true){ int min=m-d; int max=m+d; if(nyoj.is_prime(min)){ System.out.println(min+" "+d); break; }else{ if(nyoj.is_prime(max)){ System.out.println(max+" "+d); break; } } d+=2; } } } scan.close(); } }
相关文章推荐
- NYOJ 24 素数距离问题
- NYOJ 24 素数距离问题
- nyoj-24-素数距离问题
- NYOJ 24-素数距离问题
- nyoj题目24:素数距离问题
- nyoj 24 素数距离问题
- NYOJ-24-素数距离问题
- NYOJ 24 素数距离问题
- NYOJ 24 素数距离问题
- NYOJ 24 素数距离问题
- NYOJ-24-素数距离问题
- NYOJ24---素数距离问题
- nyoj 24 素数距离问题
- nyoj 24 素数的距离问题
- NYOJ 24 素数距离问题
- NYOJ 24 素数的距离问题
- NYOJ 24 素数距离问题
- nyoj 24 素数距离问题
- NYOJ_24 素数距离问题
- 【NYOJ】[24]素数距离问题