整数的素数和分解问题
2012-07-16 16:21
225 查看
Q:如果一个整数能够表示成两个或多个素数之和,则得到一个素数和分解式。对于一个给定的整数,输出所有这种素数和分解式。注意,对于同构的分解只输出一次(比如5只有一个分解2 + 3,而3 + 2是2 + 3的同构分解式)。
例如,对于整数8,可以作为如下三种分解:
(1) 8 = 2 + 2 + 2 + 2
(2) 8 = 2 + 3 + 3
(3) 8 = 3 + 5
A:典型的回溯问题,不过要考虑两点,一是怎么求得候选数组,也就是小于该整数的所有素数;二是怎么保证不进行同构的回溯。
例如,对于整数8,可以作为如下三种分解:
(1) 8 = 2 + 2 + 2 + 2
(2) 8 = 2 + 3 + 3
(3) 8 = 3 + 5
A:典型的回溯问题,不过要考虑两点,一是怎么求得候选数组,也就是小于该整数的所有素数;二是怎么保证不进行同构的回溯。
#include <iostream> #include <vector> #include <cmath> using namespace std; void GetPrimes(int n,vector<int>& Prime) { Prime.push_back(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) Prime.push_back(i); } } void Func(int n,int begin,vector<int>& Prime) { static vector<int> V; if(n<0) return; else if(n==0) { for(vector<int>::iterator it=V.begin();it!=V.end();++it) cout <<*it<<" "; cout <<endl; } else { int num=Prime.size(); //保证不同构 for(int i=begin;i<num;++i) { V.push_back(Prime[i]); Func(n-Prime[i],i,Prime); V.pop_back(); } } } int main() { int n=8; vector<int> Prime; GetPrimes(n,Prime); Func(n,0,Prime); return 0; }
相关文章推荐
- 整数的素数和分解问题
- 整数的素数和分解问题
- 整数的素数和分解问题
- 整数的素数和分解问题
- 整数的素数和分解问题
- 整数的素数和分解问题
- 整数的素数和分解问题
- 158 整数的素数和分解问题
- 面试题精选(66):整数的素数和分解问题
- 整数的素数和分解问题
- C程序实现整数的素数和分解问题
- 数论--素数筛选法与整数的素因子分解
- hdu 2582(数论相关定理+素数筛选+整数分解)
- 整数的素数分解算法
- 整数因子分解问题
- 大整数的素数判断,素数分解 POJ2191
- 【51 nod 1189】【素数+整数唯一分解定理】阶乘分数
- 学习笔记:素数的判定以及整数的唯一分解定理
- 整数因子分解问题
- Pollard_rho算法(大整数的因子分解或判断是否为素数)