整数的素数和分解问题
2015-06-09 10:36
344 查看
歌德巴赫猜想说任何一个不小于 6 的偶数都可以分解为两个奇素数之和。
对此问题扩展,如果一个整数能够表示成两个或多个素数之和,则得到一个素数和分解式。
对于一个给定的整数,输出所有这种素数和分解式。
注意,对于同构的分解只输出一次(比如 5 只有一个分解 2 + 3,而 3 + 2 是 2 + 3 的同构
分解式)。
例如, 对于整数 8,可以作为如下三种分解:
(1) 8 = 2 + 2 + 2 + 2
(2) 8 = 2 + 3 + 3
(3)
8 = 3 + 5
对此问题扩展,如果一个整数能够表示成两个或多个素数之和,则得到一个素数和分解式。
对于一个给定的整数,输出所有这种素数和分解式。
注意,对于同构的分解只输出一次(比如 5 只有一个分解 2 + 3,而 3 + 2 是 2 + 3 的同构
分解式)。
例如, 对于整数 8,可以作为如下三种分解:
(1) 8 = 2 + 2 + 2 + 2
(2) 8 = 2 + 3 + 3
(3)
8 = 3 + 5
import java.util.ArrayList; import java.util.List; public class DecomposeNumber { static List<Integer> tmp = new ArrayList<Integer>(); private static void getPrimeArr(int n, List<Integer> list) { list.add(2); for(int i=3;i<=n;++i) { int k; for(k=2;k*k<=i;++k) if(i%k==0) break; if(k*k>i) list.add(i); } } public static void solution(int n, int start, List<Integer> list){ if(n<0){ return; }else if(n==0){ for(int i: tmp){ System.out.print(i+" "); } System.out.println(""); }else{ int num = list.size(); for(int i=start;i<num;i++){ tmp.add(list.get(i)); solution(n-list.get(i),i,list); tmp.remove(list.get(i)); } } } public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); getPrimeArr(8,list); solution(8,0,list); } }
相关文章推荐
- 全面理解面向对象的 JavaScript
- 11. C#数据结构与算法 -- 顺序队列
- ubuntu下sh文件使用
- LeetCode 之 Container With Most Water — C 实现
- copy, copy_if, copy_backward函数解析
- Javascript实现下拉菜单
- 常用的operator classes
- Android studio导入eclipse项目
- Android调用系统相机拍照并获取图片
- 数据挖掘10大算法(6)--K近邻算法
- [Swust OJ 893]--Blocks
- Jmeter- Building a Web test plan(3)
- C#中的显式和隐式接口实现
- ptr_fun详解
- leetcode--Subsets
- MySQL
- opencv自适应阀值cvAdaptiveThreshold的应用
- avaScript document对象详解
- [深入浅出Cocoa]iOS网络编程之CFNetwork
- int、NSInteger、NSUInteger、NSNumber的区别和联系