NYOJ 24 素数的距离问题
素数的距离问题
时间限制: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
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(); } }
版权声明:本文博主原创文章,博客,未经同意不得转载。