浙江华企做网站,php网站开发人员,桂林象鼻山作文300字,linux 一键 WordPress题目#xff1a;输入一个正整数#xff0c;若该数能用几个连续正整数之和表示#xff0c;则输出所有可能的正整数序列。 一个正整数有可能可以被表示为n(n2)个连续正整数之和#xff0c;如#xff1a; 1512345 15456 1578 有些数可以写成连续N#xff08;1输入一个正整数若该数能用几个连续正整数之和表示则输出所有可能的正整数序列。 一个正整数有可能可以被表示为n(n2)个连续正整数之和如 1512345 15456 1578 有些数可以写成连续N1个自然数之和比如142345有些不能比如8.那么如何判断一个数是否可以写成连续N个自然数之和呢 一个数M若可以写成以a开头的连续n个自然数之和则Ma(a1)(a2)…(an-1)n*an*(n-1)/2要求a!0否则就是以a1开头的连续n-1个整数了也就是要求(M-n*(n-1)/2)%n0这样就很容易判断一个数可不可以写成连续n个自然数的形式了遍历n2…sqrt(M)*2还可以输出所有解。 void divide(int num)
{ int i,j,a; for(i2; isqrt((float)num)*2; i) { if((num-i*(i-1)/2)%i0) { a(num-i*(i-1)/2)/i; if(a0) { for(j0; ji; j) coutaj ; } coutendl; } }
} 第二个问题是什么样的数可以写成连续n个自然数之和什么样的数不能 通过编程实验发现除了2^n以外其余所有数都可以写成该形式。下面说明为什么。 若数M符合条件则有Ma(a1)(a2)…(an-1)(2*an-1)*n/2而2*an-1与n肯定一个为奇数一个为偶数即M一定要有一个奇数因子而所有2^n都没有奇数因子因此肯定不符合条件。 再证明只有M有一个奇数因子即M!2^nM就可以写成连续n个自然数之和。假设M有一个奇数因子a则Ma*b。 若b也是奇数只要b-(a-1)/20M就可以写成以b-(a-1)/2开头的连续a个自然数将这条结论里的a和b调换仍然成立。153*512345456.若b是偶数则我们有一个奇数a和一个偶数b。2.1 若b-(a-1)/20M就可以写成以b-(a-1)/2开头的连续a个自然数。243*8789. 2.2 若(a1)/2-b0M就可以写成以(a1)/2-b开头的连续2*b个自然数。3819*2891011.上述两个不等式必然至少有一个成立所以可以证明只要M有一个奇数因子就一定可以写成连续n个自然数之和。 另一个正整数分解的算法 sum(i,j)为i累加到j的和 令 i1 j2 if sum(i,j)N i else if sum(i,j)N j else cout i...j 参考代码 #include iostream
using namespace std; int add(int m,int n)
{ int sum0; for(int im;in;i) sumi; return sum;
} void divide(int num)
{ int i1,j2,flag; int sum0; while(inum/2) { sumadd(i,j); while(sum!num) { if(sumnum) i; else j; sumadd(i,j); } for(int ki;kj;k) coutk ; i; coutendl; }
} int main()
{ int num; coutPlease input your number:endl; cinnum; divide(num); return 0;
} 转载于:https://www.cnblogs.com/wuyida/p/6301374.html