如何使用循环找到数字的素数因子分解?

时间:2014-11-26 00:55:21

标签: java loops variables printing

我应该找到这个数字的素数分解: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 ++)&它不起作用。它也给了我复合数字。 请帮助!!

5 个答案:

答案 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整除。

非常欢迎!