java acm 24题 素数距离问题 解析
来源:互联网 发布:工控机软件 编辑:程序博客网 时间:2024/05/05 02:40
素数距离问题
时间限制:3000 ms | 内存限制:65535 KB
难度:2
- 描述
- 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0- 输入
- 第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000), - 输出
- 每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。 - 样例输入
36810
- 样例输出
5 17 111 1
关于这道题目,很多人都会去考虑怎么去得到两边的素数值,怎么去判断两边的素数。
博主的方法就是利用递归的方法两边跑,两边去判断
import java.util.Scanner; public class Main { public static void main(String args[]){ Scanner scan=new Scanner(System.in); int n=Integer.parseInt(scan.nextLine()); while(n!=0){ int num=scan.nextInt(); if(num<=2) System.out.println("2 "+(2-num)); else if(isPrime(num))//先判断该数字是不是素数,如果是就返回true,如果不是则false; System.out.println(num+" 0"); else{ int big=add(num); int small=plubs(num); if(big-num<num-small)//这里就是比较左边跟右边的素数相距原来的数字距离有多大 System.out.println(big+" "+(big-num)); else if(big-num>=num-small) System.out.println(small+" "+(num-small)); } n--; } } public static boolean isPrime(int n){//判断是否为素数的方法 if (n == 3) return true; else for(int i=2;i<=Math.sqrt(n);i++){ if(n%i == 0) return false; } return true; } public static int add(int num){//向右边跑,不断验证右边的数字,直到是素数为止 for(int i=2;i<=Math.sqrt(num);i++){ if(num%i==0){ num++;//如果他不是素数,就+1,继续往右边跑 return add(num); //利用递归的方法 } } return num; } public static int plubs(int num){//向左边跑,不断验证左边的数字,直到是素数为止 for(int i=2;i<=Math.sqrt(num);i++){ if(num%i==0){ num--;//如果他不是素数,就-1,继续往左边跑 return plubs(num); //利用递归的方法 } } return num; } }
有个很重要的问题有些人可能没发现。
就是当你输入数据为小于2的数的时候,问题就出现了
1它不是素数,所以呢,就要两边去找,0肯定不是,所以就找到了2,然后2距离1的位置是1
所以当你输入1的时候,输出的就必须为 2 1
if(num<=2)//num是输入的数字 System.out.println("2 "+(2-num));这条语句,就是判断数字小于2的时候作出的处理
最后的用时为 315 1082
3151082
0 0
- java acm 24题 素数距离问题 解析
- ACM-素数距离问题
- Acm 素数距离问题
- 素数距离问题(南阳acm)
- ACM:蓝桥杯:素数距离问题
- NYOJ-ACM-素数距离问题
- ACM 24 素数距离问题(记录距离最近的素数)
- 南阳理工ACM 题目24 素数距离问题
- ACM练习—素数距离问题
- 【素数距离问题 24】
- 24 素数距离问题
- 素数距离问题_ny_24.java
- ACM 素数距离
- 题目24: 素数距离问题
- NYOJ 24 素数距离问题
- NYOJ 24-素数距离问题
- 南阳-24-素数距离问题
- NYOJ 24 素数距离问题
- 图像相似度算法--SIFT算法详解
- Linux定时执行php
- 随记笔录
- 基于MATLAB的有限差分法解决二位瞬态导热问题
- 相似图片搜索(直方图相似度)
- java acm 24题 素数距离问题 解析
- 图像处理之相似图片识别(直方图应用篇)
- Elasticsearch 入门:Elasticsearch 5.0 安装 kibana 5.0
- linux常用命令的英文单词缩写
- 蓝桥杯-算法训练-矩阵乘法
- 入项目后,servlet文件报错解决方法
- SIFT特征提取分析
- Dungeon Game
- 编译 cm-13-kiwi-4-honor5x - extract-files.sh - proprietary-files.txt