One编程组第七次题目
将一个数拆分成两个数的加和。
这个数为 n, 则一次
for(int I = 1; I < n; i++)
{
Printf(“%d,%d”,I,n-i);
}
前提条件中少了两个数皆为正
将一个数n拆分成任两个数的积。
最慢的方法是两个 for
最快的方法是开一个 m 的空间(m*m>=n取最小的m)。比如 4 不能被整除,那么所以 4
的倍数都不能被整除。排除后一些,继续遍历可使速度加快。
题目描述:一个正整数有可能可以被表示为 n(n>=2) 个连续正整数之和,如:
这个转换为数学公式最快:
a+1+a+2+a+3+…+a+k = z
最多有几个 a 是可以算出来的。
Na+k ( k+1 ) /2 = z
(N == k)
当 a==1 时 k 的最大值就可用求根公式计算
然后 for(int i=k,i>0;i–) 循环就可以把所有的 a 找到。