#include<iostream.h>
int d[1000],num;
long number;
void divide(int k,int n)
{
int i,j;
for(i=d[k-1]+1;i*2<n;i++)
{
d[k]=i;
if((n-i)>d[k]*2)
divide(k+1,n-i);
d[k+1]=n-i;
number++;
cout<<endl<<"NO."<<number<<"=";
for(j=1;j<=k;j++)
cout<<d[j]<<"+";
cout<<d[j];
}
}
void main()
{
int i,j;
cout<<"Input the number to divide:";
cin>>num;
d[0]=0;
divide(1,num);
}
第二种算法:
#include <iostream>
#include <ctime>
using namespace std;
int count1=0;
void print(int b[],int n)
{
int j;
count1++;
cout<<n+1<<"=";
for(j=0;j<n-1;j++)
if(b[j]!=0)
{ cout<<b[j];break;}
for(j=j+1;j<n;j++)
if(b[j]!=0)
cout<<"+"<<b[j];
cout<<endl;
}
void GetPowerSet(int i,int a[],int b[],int n)
{
//功能:求以数组a[i,..,n-1]中元素为集合中元素的集合的冥集
//在对字符串中元素进行运算时要注意字符串的结束符'\0'也算是集合中的元素
//具体处理的方法见上例
int j,sum=0;
if(i==n)
{
for(j=0;j<n;j++)
sum+=b[j];
if(sum==n+1) print(b,n);
}
else
{
for(j=0;j<n;j++)
sum+=b[j];
if(sum==n+1)
print(b,n);
if(sum<n+1)
{
b[i]=a[i]; GetPowerSet(i+1,a,b,n);
b[i]=0; //b[i]所重新赋的值必须是a中不曾出现的元素
GetPowerSet(i+1,a,b,n);
}
}
}
int main()
{
int N;
time_t time1,time2;
cout<<"输入你要分解的数字:";
cin>>N;
time1=time(NULL);
int *a=new int[N-1];
int *b=new int[N-1];
for(int i=0;i<N-1;i++)
{ a[i]=i+1; b[i]=0;
}
GetPowerSet(0,a,b,N-1);
cout<<"有"<<count1<<"种分解方法"<<endl;
time2=time(NULL);
cout<<difftime(time2,time1)<<"花费";
system("pause");
return 0;
}
分享到:
相关推荐
设n是一个正整数,现在要将n分解为若干个互不相同的自然数的和,且使这些数的乘积最大。
将正整数n表示成一系列正整数之和:n=n1+n2+…+nk,其中n1≥n2≥…≥nk≥1,k≥1。 正整数n的这种表示称为正整数n的划分。求正整数n的不同划分个数。 例如正整数6有如下11种不同的划分: 6; 5+1; 4+2,4+1+1...
大于1 的正整数n可以分解为:n=x1*x2*…*xm。 例如,当n=12 时,共有8 种不同的分解式: 12=12; 12=6*2; 12=4*3; 12=3*4; 12=3*2*2; 12=2*6; 12=2*3*2; 12=2*2*3。 编程任务: 对于给定的正整数n,编程...
证明:对任意正整数n,都存在连续n个正整数,它们都是合数.pdf
设n是一个正整数。现在要求将n分解为若干互不相同的自然数的和,且使这些自然数的乘积最大。
大于1 的正整数n可以分解为:n=x1*x2*…*xm。 算法设计: 对于给定的正整数n,编程计算n共有多少种不同的分解式。 例如,当n=12 时,共有8 种不同的分解式: 12=12; 12=6*2; 12=4*3; 12=3*4; 12=3*2*2; 12=2*6...
将第一个因子为2的分解个数,加上第一个因子为3的分解个数,...,直至加到第一个因子为12的分解个数. 而第一个因子为2的分解个数又是多少呢?是6(因为12/2=6)的分解个数,递归求解! 可用“递归”和“备忘录方法”两种...
大于1 的正整数n可以分解为:n=X1*X2*…*Xm。 例如,当n=12 时,共有8 种不同的分解式: 12=12; 12=6*2; 12=4*3; 12=3*4; 12=3*2*2; 12=2*6; 12=2*3*2; 12=2*2*3。 编程任务: 对于给定的正整数n...
给定n 位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个 新的正整数。对于给定的n位正整数a 和正整数k,设计一个算法找出剩下数字组成的新数 最小的删数方案。 «编程任务: 对于给定的正...
进制转换 把一个任意的十进制正整数 N 转换成 d 进制数。 N 是一个正整数,d 是一个大于 1 小于 10 的整数,二者均由用户输入,且两数字用换行分隔。
3. 题目:将一个正整数分解质因数。 需要swing
数组a中已存有互不相同的10个整数从键盘输入一个整数,找出与该值相同的数组元素下标。 (如果没找到,输出“没找到”).c
输入计算出的分解式的数目
任意正整数都能拆成若干唯一的2的幂指数之和,php版本和js版本都有。
将第一个因子为2的分解个数,加上第一个因子为3的分解个数,...,直至加到第一个因子为12的分解个数. 而第一个因子为2的分解个数又是多少呢?是6(因为12/2=6)的分解个数,递归求解! 可用“递归”和“备忘录方法”两种...
设有n个正整数,将他们连接成一排,组成一个最大的多位整数。 如:n=3时,3个整数13,312,343,连成的最大整数为34331213。 如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。 输入描述: 有多组测试样例,每组...
整数因子分解问题:给定正整数n,编写递归算法,计算n共有多少种不同的分解式,并输出这些分解式。
将第一个因子为2的分解个数,加上第一个因子为3的分解个数,...,直至加到第一个因子为12的分解个数. 而第一个因子为2的分解个数又是多少呢?是6(因为12/2=6)的分解个数,递归求解! 可用“递归”和“备忘录方法”两种...
将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5
将大整数N!分解,核心算法为将大整数的各次幂整除N