算法-因子分解问题

算法-因子分解问题

想挽留 发布于 2017-04-12 字数 126 浏览 1095 回复 3

对于一个正整数,求出他的所有质因子。例如72 = 2(3) * 3(2), 181944 = 2(3) * 3(2) * 7 * 19(2)。m(n)表示m的n次方

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

归属感 2017-08-22 3 楼

/**
* @author Administrator
* 这跟求N之前的质数类似,只要在这上面稍加修改就可以了
*/
public class Test2
{
public static void main(String args[])
{
String ys="";//代表因式分解的String
int N=181944;//N
int ns=N;//当值为1时表示,已获得所有因子
for(int i=2;i<=N;i++)
{
while(ns%i==0)//如果是因子,就循环求得有几个这样的因子
{ys=ys+i+"*";ns=ns/i;}
if(ns==1)break;//当ns=1时就没必要再遍历下去了,将这个判断放下面可以避免一次++操作
}
System.out.println(N+"="+ys.substring(0,ys.length()-1));
}
}

夜无邪 2017-08-14 2 楼

ruby:

def f n, i=2
return if n < i
if n % i == 0
p i
f n/i, i
else
f n, i+1
end
end

结果

 => f 12
2
2
2
3
3

=> f 181944
2
2
2
3
3
7
19
19

偏爱自由 2017-05-19 1 楼

可以采用递归得到所有的质因子(如以下代码所示),要得到相同的质因子个数,可以采取将质因子放进数组,然后得到相同的(以下程序没写)

public static int get(long n)
{
long k=0, m;
for (int i = 2; i <=n; i++)
{
if (n % i == 0)
{
k = i;
m = n / i;
if (m != i)
{
Console.Write(i.ToString());
Console.Write(" ");
if (m > 2)
return get(m);
else
return 0;
}
else
{
Console.Write(i.ToString());
Console.Write(" ");
break;
}
}

}
Console.Write(k.ToString());
Console.Write(" ");
return 0;
}