判断一个正整数能否表示为两个质数之和
2017-03-26 12:20
337 查看
思路:
假设输入的是n,那么
1. 生成1到n之间的所有质数;(可知,是递增的序列)
2. 双向遍历数组(头尾同时开始),相等直接返回,否则:如果和大于n,那么right下标减一;和小于n,那么left下标加一;
代码java实现如下:
假设输入的是n,那么
1. 生成1到n之间的所有质数;(可知,是递增的序列)
2. 双向遍历数组(头尾同时开始),相等直接返回,否则:如果和大于n,那么right下标减一;和小于n,那么left下标加一;
代码java实现如下:
import java.util.ArrayList; import java.util.Scanner; public class MainZhiShu { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); Integer[] canditates = MainZhiShu.ZhiShuHelper.generateZhiShu(n); if(canditates.length == 0) { System.out.println("NO"); }else { int left = 0, right = canditates.length -1; boolean result = canditates[right] == n ? true : false; //判断n是否就是质数 if(!result) { //n不是质数,故进入双向遍历判断 while(left <= right) { if(canditates[left] + canditates[right] == n) { result = true; break; }else if(canditates[left] + canditates[right] > n) { right--; }else { left++; } } } if(result) { System.out.println("YES:("+canditates[left]+","+canditates[right]+")"); }else { System.out.println("NO"); } } } static class ZhiShuHelper { public static Integer[] generateZhiShu(int n) { ArrayList<Integer> list = new ArrayList<Integer>(); boolean work = false; for(int i = 2; i <= n; i++ ) { work = true; for(int j = 2, border = (int) Math.sqrt(i); j <= border; j++) { if(i % j == 0) { work = false; break; } } if(work) { list.add(i); } } Integer[] a = new Integer[list.size()]; System.out.println(list.toString()); return list.toArray(a); } } }
相关文章推荐
- PHP 输入两个整数序列。其中一个序列表示栈的push 顺序, 判断另一个序列有没有可能是对应的pop 顺序
- 输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。为了简单起见,我们假设push序列的任意两个整数都是不相等的。 比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个pop系列。
- 输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。 为了简单起见,我们假设push序列的任意两个整数都是不相等的
- 每天学习一算法系列(27)(输入两个整数序列。其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序)
- 题目:输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。
- 输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序
- 两个整数序列,其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 【算法】输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。
- 输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。 为了简单起见,我们假设push序列的任意两个整数都是不相等的
- 【练习】输入两个整数序列。其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
- <仅是自己做笔记。。。系列-14>输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 微软算法100道题-------输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 输入一个整数a,再输入两个整数p(p<32),v(0|1),将该整数a的p位设置为v,输出修改后的该整数的二进制表示.
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- C#l练习(用方法来实现:①判断一个给定的整数是否为“质数”。②计算1-100之间的所有质数(素数)的和
- 写一个函数,判断一个int型的正整数是否是2的幂,即是否可以表示成2^X的形式(不可以用循环)
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。
- 质数的判断然后随机的找到一个偶数等于两个素数的和
- 编写算法对输入的一个整数,判断它能否被3,5,7整除,并输出一下信息之一: