我有以下用于素数分解的代码。
public static void primeFactors(int n)
{
for (int i = 2; i <= Math.sqrt(n); i = i+1)
{
while (n%i == 0)
{
factors.add(i);
n = n/i;
}
}
if (n>2 ) {
factors.add(n);
}
System.out.println(factors);
}
从数学的角度来看,我们必须检查每个除数i是否也是素数而不仅仅是因子。任何人都可以(数学上)解释为什么算法仍然有效?
答案 0 :(得分:1)
假设<!doctype html>
<!-- distance.html Mason Boroff -->
<!-- =================================================== -->
<html>
<head>
<title> Distance Calculator </title>
</head>
<body>
<h2>Distance Calculator</h2>
<p>
Coordinate 1: (<input type="text" id="xOne" size=12 value=''> ,
<input type="text" id="yOne" size=12 value=''>)
<br>
Coordinate 2: (<input type="text" id="xTwo" size=12 value=''> ,
<input type="text" id="yTwo" size=12 value=''>)
<br>
<br>
<input type="button" onclick="ShowDistance()" value="Calculate
Distance">
</p>
<hr>
<div id="outPut"> </div>
</body>
不是素数;说i
= i
其中j * k
和j
小于k
。这意味着当我们的循环达到i
时,它首先已达到i
和j
。在我们完成k
的循环之后,j
无法再被n
整除,因为我们已经将j
中的所有j
分解出来了。同样适用于k
。因此,当我们为i
执行循环时,我们知道n
无法再被j
或k
整除;因此它不能被i
整除。所以永远不会执行while
循环。这意味着我们不需要对非素数i
进行特殊检查,因为无论如何都不会发生。