357 Prime Generating Integers
30 能够分解得到的因数分别是 1,2,3,5,6,10,15,30
对于 30 的每一个因数 都是一个质数。
求不超过 100 000 000,且满足性质每一个因数 , 都是质数的 的和。
分析一下什么样的 满足上述性质。
能够分解成一系列的因数,记做 ,其中 ,也就是说只要分析前面一半,小于 的因数即可。
第一个因数肯定是 1,那么 是质数。所以先使用筛选法得到小于 100 000 000 的质数,然后都减去 1,得到的数才可能满足题意。
假如 能整除 4,也就是说 ,第二个因数是 2,且 , 是偶数,肯定不是质数,所以我们把能整除 4 的数排除。
同理, 也不能被 9 整除。但是剩余数能被 9 整除的也就只有几十万了,对于二百八十多万来说,差距不大,就没有用这条性质再过滤数据了。
long[] primes = Utils.GenPrimes(100000000);
var candidates = primes.Where(p => p != 0 && (p - 1) % 4 != 0)
.Select(p => p - 1).ToArray();
现在,从剩余的 中看有多少是满足题意的。正如上面所分析的,只要分析前面一半,小于 的因数即可。