我应该找到这个数字的素数分解:600851475。
根据我的老师和本网站http://www.mathsisfun.com/prime-factorization.html,素数因子化是乘以这个数字的素数。因此,例如12,尽管其因子是2,3,4,6,但素数因子不仅仅是2& 3,但2,2,3。
我有算法找到一个素数因子allready,但我找不到循环的方法,所以它一直找到其余的,直到没有更多的素因子。
这就是我得到的:
public class primeFactors {
public static void main(String[] args) {
int d= 600851475;
int i = 2;
if (d%i!=0) {i++;}
if (d%i==0) {d=d/i;}
System.out.println(i);
}
}
并打印出来:3。
如果我复制粘贴它多次,它会打印不同的东西:
public class primeFactors {
public static void main(String[] args) {
int d= 600851475;
int i = 2;
if (d%i!=0) {i++;}
if (d%i==0) {d=d/i;}
System.out.println(i);
if (d%i!=0) {i++;}
if (d%i==0) {d=d/i;}
System.out.println(i);
if (d%i!=0) {i++;}
if (d%i==0) {d=d/i;}
System.out.println(i);
if (d%i!=0) {i++;}
if (d%i==0) {d=d/i;}
System.out.println(i);
}
}
那个打印:3个,3个,4个,5个,5个。 我怎么能用循环做这个?我尝试使用do while循环(do {if section} while(d> i){print i}),但它不起作用。我也试过for循环(i = 2; i< = d; i ++)&它不起作用。它也给了我复合数字。 请帮助!!
答案 0 :(得分:1)
由于这是一项任务,我给你的最多的是一个大方向:最简单的方法是尝试候选除数并减少。例如:
130 - 尝试2,它分开,所以减少 65 - 也许还有另外2个?再试一次。它没有分裂,所以继续前进 65 - 尝试3 - 没有。 4?没有。 5?是的,它分开,所以减少。 13 - 那里还有5个吗?没有。尝试6,7,8,9,10,11,12。好的,你已经完成了。
所以你需要在一个循环中尝试候选除数,你需要一个内循环来确保你抛出任何重复因子(例如,525将具有素数因子3,5和7,但你仍然想要摆脱第二个5)。这应该让你走上正轨。
显然,会有更有效的方式来编写它,但如果你遇到困难,请从最简单的可能工作开始,然后开始工作。答案 1 :(得分:1)
你只需要这样的东西(也许这不是最有效的方式,但它非常直接且更容易理解):
int d= 600851475;
for (int i = 2 ; i < (d / 2) ; i++){
if(isPrime(i)){
if(d % i ==0){
System.out.println(i + "Is a prime factor of " + d);
}
}
}
但首先你需要使用这种方法来检查它是否是素数
public static boolean isPrime(int n){
for(int i = 2 ; i < n ; i++){
if(n % i == 0){
return false;
}
}
return true;
}
答案 2 :(得分:0)
尝试使用for循环。
for (int i = 2; i <= d; i++)
{
//implement if statement here
}
这应该指向正确的方向。
答案 3 :(得分:0)
你有正确的想法。你需要划分每个因素,直到它不再分开。
// this will print all prime divisors for n
for (int i = 2; n != 1; i++)
{
while (n % i == 0)
{
System.out.println (i);
n /= i;
}
}
答案 4 :(得分:0)
如何找到数字的素因式分解?
这是我尝试过的:
def p_factorization(n):
#Finding the factors of n.
num=[i for i in range(1,n+1) if n%i==0]
#Finding the prime factors of n.
#Now prime_num checks to see if any of the factors of 36 have more than two "subfactors".
prime_num=[i for i in range(2,max(num)) if len([j for j in range(1,i+1) if i%j==0])<=2 and max(num)%i==0]
return prime_num
#Explanation:
#The num list is self-explanatory. It finds all of the factors of the number n.
#The prime_num list comprehension is where it gets complicated:
#The i represents all of the numbers in the range of the original factors that we found,
#then we know that a number is prime if it has two or fewer factors, hence the if condition
#applying to the len of the factors of i, which is being iterated through.
#For example, 4 is not a prime number because the length of the list of factors is
#3 [1,2,4].
当然,我们仍然需要max(num)被i整除。
非常欢迎!