如何用c++算法计算出所有平方数的和呢?

如题所述

小于100的正整数,任意两个之和的最小值是1+2=3,最大值99+100=199;

对应的平方数范围,最小是2^2=4,最大是14^2=196。

没有直接推导的方式,并且p个数的组合不是唯一的。因此,可以借助编程,按照一定的规则来进行筛选,选出尽可能多的数,即可求得p。

算法设计:

从分布规律看,平方数越大,之间间隔也越大。因此,两个较小数的和是平方数的概率要高于两个较大数的组合,可以优先剔除较小的数,保留较大的数。

数组a保留1到14的平方;数组b标记1到100是否保留,初值为1(保留),枚举结果需要剔除的设置为0(剔除)。

通过两层循环,第一层从100到1,第二层从1到第一层当前数减1,若遇到两数之和为平方数的,标记第二层循环的当前数b为0。

计算结果,p=31,即,最多存在31个数,其中任意两个数之和都不是平方数。

其中一个组合为:

1,2,4,6,9,11,13,17,18,20,22,26,28,33,37,39,41,49,50,52,54,56,57,66,73,76,81,85,86,97,100。

附:计算结果和fortran代码

温馨提示:答案为网友推荐,仅供参考