我正在开发一个Java中的素数分解程序,它显示数字的所有素因子,即使它们被重复。我有这个:
public static void factors(int a)
{
int c=1;
for(int i = 1; i <= a;i++)
{
if(a%i == 0)
{
for(int k = 2; k < i; k++)
{
if(i%k == 0)
{
c = 1;
break;
}
else
{
c = 0;
}
}
if(c == 0 || i == 2)
{
System.out.print(i+ ", ");
}
}
}
}
我需要考虑重复的因素(如2,2,2,8)。如果不完全重组,我怎么能这样做?
答案 0 :(得分:1)
我认为你应该重新开始,并根据这个简单的描述构建一个算法:
List<Integer>
小于或等于2 ^ 16 1
。查找素数列表本身就是一个有趣的问题。 Dijkstra在1972年写了一篇引人入胜的章节。This article有一个C ++实现和一个非常好的讨论。
答案 1 :(得分:0)
您可以拥有另一个维护因子及其数量的集合,并最终可以解释重复因素。我会选择带有计数的地图。
答案 2 :(得分:0)
(1)if(c == 0 || i == 2)
错误,它也会为2
打印a == 5
。
(2)为了在不改变代码(*)的情况下做你要求的事情 - 你应该计算每个素因子可以被数字分成多少次。可以通过在print语句之前添加一个新循环来实现[伪代码]:
boolean b = true;
int k = 1;
while (b) {
if (a % (int) Math.pow(i, k+1) == 0) k++;
else b = false;
}
在此循环结束时,k表示i
是a
的主要因素的次数。
(*)注意:虽然这种方法应该有效,但我仍然会将@KerrekSB建议重新设计。