先取出当中所有的奇数。奇数一定不是任何整数的两倍,有 (1989+1)/2=995个。
再从偶数当中,将范围内奇数的 4^n倍的数挑选出来,它们也一定不是选出的另一个数的两倍,一定是四倍以上的倍数或者不是整数倍。选择 4^n作为系数,是因为4是只含有2质因数的大于2的最小可选数,能确保取出更多的数。
接下来计算取出偶数的数量。计算出相乘的最大奇数,就可以知道n对应的偶数数量。
n=1时,1989/4^1=497.25,最大奇数可以到497,一共有 (497+1)/2=249个;
n=2时,1989/4^2=124.31,最大可以到123,一共有 (123+1)/2=62个;
n=3时,1989/4^3=31.08,最大可以到31,一共有 (31+1)/2=16个;
n=4时,1989/4^4=7.77,最大可以到7,一共有 (7+1)/2=4个;
n=5时,1989/4^5=1.94,最大可以到1,只有1个;
上述取出偶数的总数是:249+62+16+4+1=332个。
上述两项合计,最多可以取出 995+332 = 1327个数,使得每一个数都不是另一个数的两倍。
又写了一段代码进行了枚举验证,结果相同。
附:计算结果和fortran代码