我讨厌不得不问,但我已经被困在这里了.
我需要测试一系列数字来找到第一个有超过500个因子的数字:http: //projecteuler.net/index.php?section = problem&id = 12
- 首先我试图强行回答(在很长一段时间后找到一个480的数字)
- 我现在正在考虑确定数字的素因子,然后用它们来找出所有其他因素.
我目前处于可以获得任何数字输入的一系列素数因子的阶段 - 即300具有素因子2 2 3 5 5
使用这个素数因子我需要能够计算剩余因子 - 这是我坚持的部分.基本上,据我所知,我需要计算数组中所有可能的数字组合......
即2*2
2*2*3
2*2*3*5
2*3
2*3*3
......等等 - 但有趣的地方是......
2*5
2*3*5
...即阵列中彼此不相邻的数字
对于任何长度数组,我都想不出以通用的方式编写代码的方法......
我需要帮助!PS - 我在Java工作
编辑:我的强力代码 - 因为它已被建议暴力强迫问题将工作,所以我的代码可能有一个错误:(
package euler.problem12; public class Solution { public static void main(String[] args) { int next = 1; int triangle = 0; int maxFactors = 0; while(true) { triangle = triangle + next; int factors = 1; int max = (int) triangle / 2; for(int i = 1; i <= max; ++i) { if(triangle % i == 0) { factors ++; } } if(factors > maxFactors) { maxFactors = factors; System.out.println(triangle + "\t" + factors); } next++; } } }
The Archetyp.. 9
好的,第二次尝试,因为我太困难了.
答案在这里给出:http://mathforum.org/library/drmath/view/57151.html
如果将一个数字分解为其主要功率因子,则通过将所有指数加1并将这些结果相乘来找到因子总数.示例:108 = 2 ^ 2*3 ^ 3,因此因子的总数是(2 + 1)*(3 + 1)= 3*4 = 12.果然,因子108是1,2,3 ,4,6,9,12,18,27,36,54和108.这是因为要成为一个因素,数字必须具有相同的素数,并且提升到相同或更低的幂.
因此,如果你知道主要因素,你只需要计算重复因子并使用上面的计算来计算出因子的数量.
好的,第二次尝试,因为我太困难了.
答案在这里给出:http://mathforum.org/library/drmath/view/57151.html
如果将一个数字分解为其主要功率因子,则通过将所有指数加1并将这些结果相乘来找到因子总数.示例:108 = 2 ^ 2*3 ^ 3,因此因子的总数是(2 + 1)*(3 + 1)= 3*4 = 12.果然,因子108是1,2,3 ,4,6,9,12,18,27,36,54和108.这是因为要成为一个因素,数字必须具有相同的素数,并且提升到相同或更低的幂.
因此,如果你知道主要因素,你只需要计算重复因子并使用上面的计算来计算出因子的数量.