【问题标题】:Prime Factoring in Java - Intro ProgrammingJava 中的素数分解 - 编程入门
【发布时间】:2016-10-17 22:36:29
【问题描述】:

原文:所以对于我的编程课程介绍,我们必须找到用户输入的一系列数字(即 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();
    }
}

【问题讨论】:

  • 为什么是r 标签? “结果不正确”是什么意思?

标签: java primes prime-factoring factoring


【解决方案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;
  }

【讨论】:

    【解决方案2】:

    您的方法非常接近解决方案。但你的 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!");
    }
    

    【讨论】:

      猜你喜欢
      • 2011-05-15
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      相关资源
      最近更新 更多