Java中的Prime Factoring - 简介编程

问题描述 投票:-3回答:2

原文:因此,对于我的编程类介绍,我们必须找到用户输入的一系列数字的素数因子(即59-65)。这里有很多解决方案的问题是他们使用我们没有在类中讨论的事情,如数组,继续等。这是一个非常基本的类。至于要求,我们必须使用我们在第一个for循环中调用的primeFact方法/函数。她指示我们在方法中使用while和for循环来获得主要因素,但每当我认为我有某些东西时,它就不对了。任何帮助都非常感谢,我的代码如下。我真的只需要用方法部分帮助找到因子的算法。

编辑:这是我上传的最终解决方案。它的工作原理将给出给定数字范围内所有数字的所有素数因子。

import java.util.Scanner;

public class PrimeFact {

public static void main(String[] args) {
    int start, stop;

    //Get input
    Scanner input = new Scanner(System.in);
    System.out.println("Please enter then two values with the lower value first");
    start = input.nextInt();
    stop = input.nextInt(); 
    input.close();

    //Displays for the start of the loop
    System.out.println("Starting value (at least two digits): "+start);
    System.out.println("Ending value (at least two digits): "+stop);
    System.out.println("Prime factors for numbers between "+start+" and "+stop);

    //Loop for the prime factors
    for (int num = start; num <= stop; num++) {
        primeFact(num);
    }
}

// Method for Prime Factoring
public static void primeFact(int num) {
    int divisor = 2;
    System.out.print(num+" = ");
    while (num>1) {
        if ((num%divisor) == 0) {
            System.out.print(divisor+" x ");    
            num=num/divisor;            
        } else {
            divisor++;
        }
    }
    System.out.print("1");
    System.out.println();
    }
}
java primes prime-factoring factoring
2个回答
1
投票
public static void primeFact(int num) {
   System.out.print(num+" = ");
    for(int i=2;i<num;i++)
    {
        if(num%i==0)
        {
            if(isPrime(i))
            {
                System.out.println("Prime Factor for "+num+" is:"+i);
            }
        }

     }
   if(num==2)
     System.out.println("Prime Factor for "+num+" is:"+num);
 }
static boolean isPrime(int num){
  for(int i=2;i<num;i++)
    {
        if(num%i==0)
        {
            return false;
        }
    }
    return true;
  }

//if u want use while replace the for loop like
   public static void primeFact(int num) {
   System.out.print(num+" = ");      

    int i=2;
    while(i<num)
    {
        if(num%i==0)
        {
            if(isPrime(i))
            {
                System.out.println("Prime Factor for "+num+" is:"+i);
            }
        }
        i=i+1;
     }
     if(num==2)
     System.out.println("Prime Factor for "+num+" is:"+num);
 }
static boolean isPrime(int num){
  int i=2;
   while(i<num)
    {
        if(num%i==0)
        {
            return false;
        }
     i=i+1;
    }
    return true;
  }

0
投票

你的方法非常接近解决方案。但你的while循环无效。

记住它应该是这样的:

while(<boolean statement>){
    //code here
}

我将引用我们正在检查“primality”的变量作为“num”

这是如何使用while循环检查因子:

//remember, num is given to us in the parameters of primeFact(int num).

boolean isPrime = true; //we are optimistic.

//we start at 2 because everything is divisible by one
int posFact = 2; //short for "possible factor"

while(posFact < num){ //this will start at 2, and go to 1 less than num
    if(num % posFact == 0){ // "%" gives us remainder
        isPrime = false; // we now know it's not prime
        System.out.println("The number " + posFact + " is a factor of " + num + ".");
    }
    posFact++; //increments posFact up by 1
}

if(isPrime){ //This will only be true if the number is prime
    System.out.println("The number " + num + " is prime!");
}

我们可以用for循环做同样的事情:

//remember, num is given to us in the parameters.

boolean isPrime = true; //we are optimistic.

for(int posFact = 2; posFact < num; posFact++){ //posFact's initialization and incrementation was moved here.
    if(num % posFact == 0){ // "%" gives us remainder
        isPrime = false; // we now know it's not prime
        System.out.println("The number " + posFact + " is a factor of " + num + ".");
    }
}

if(isPrime){ //This will only be true if the number is prime
    System.out.println("The number " + num + " is prime!");
}
© www.soinside.com 2019 - 2024. All rights reserved.