构建一个java程序,它读取数字并说它是素数或列出其因子

时间:2012-02-24 23:27:53

标签: java primes

我的具体项目的目标是编写一个程序,提示用户输入两个整数。程序将读取两个整数并确定它们是否为素数。如果他们不是程序将列出因素,否则它将简单地打印“素数”并反复询问用户两个整数。此外,程序应该打印两个给定整数之间的所有数字的因子以及整数本身。它还将给出素数的平均值。

目标是使最终结果看起来像这样(假设两个整数是6和11):

Please enter two integers: 6 11
6: 2 3
7: Prime
8: 2 4
9: 3
10: 2 5
11: Prime
There are three prime numbers
The average value of the prime numbers is 9.00

请输入两个整数:

所以这是我的代码:

import java.util.Scanner;

public class Prime {

public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int r1, r2, i, c = 0;

System.out.println("Please enter two integers : ");
int num1 = input.nextInt();
int num2 = input.nextInt();
while (num1 > 0 && num2 > 0)
{

for (i = 2; i < num1; i++) {
r1 = num1 % i;
r2 = num2 % i;
if (r1 == 0 && r2 == 0)
    System.out.println("Prime");
{


System.out.println(i+ "\t");
c++;

}

}
if (c == 0)
System.out.println("Prime");
System.out.print("Please enter two integers : ");
num1 = input.nextInt();
num2 = input.nextInt();



}
}}

输入6和11时这是我的输出:

Please enter two integers : 
6 11
2   
3   
4   
5   
Please enter two integers : 

现在我不知道我哪里出错了,但我觉得我必须朝着正确的方向前进。如果两个输入都是素数,它将打印素数。如果一个是素数,一个不是,它将做我上面发布的。

感谢任何和所有帮助。谢谢。

2 个答案:

答案 0 :(得分:1)

好吧,我只是简单地看一眼,但你的问题在于for循环。你从2开始,这对于检查因素是明智的。然后,同时检查num1和num2是否可被i整除(此时为2)。如果是,则打印“Prime”。然后你迭代再做一次。仔细考虑一下:它与你的想法/想法有多接近?

如果我不得不猜测,那么在

之后你错过了else
if (r1 == 0 && r2 == 0)
    System.out.println("Prime");
{

而且“if”的条件也可能被否定:if (!(r1 == 0 || r2 == 0))。这应该至少足以让你朝着正确的方向前进。

祝你好运!

答案 1 :(得分:0)

一个更短的方法。

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static List<Integer> primeFactors(int numbers) {
        int n = numbers; 
        List<Integer> factors = new ArrayList<Integer>();
        for (int i = 2; i <= n / i; i++) {
            while (n % i == 0) {
                factors.add(i);
                n /= i;
            }
        }
        if (n > 1) {
            factors.add(n);
        }
        return factors;
    }

    public static void main(String[] args) 
    {
        System.out.println("Please enter two integers : ");
        Scanner input = new Scanner(System.in);
        int num1 = input.nextInt();
        int num2 = input.nextInt();
        List<Integer> primenos = new ArrayList<Integer>();
        List<Integer> result;
        for(int i=num1; i<=num2; i++)
        {
            result = primeFactors(i);
            System.out.print(i +":");
            if(result.size()==1 && result.get(0)==i)
            {
                System.out.println(" prime");
                primenos.add(i);
            }
            else
            {
                for (Integer j : result) {
                    System.out.print(" "+j);
                }
            }
            System.out.println();
        }
        System.out.println("There are "+primenos.size()+" prime numbers");
        int total = 0;
        for(Integer j : primenos)
        {
            total+=j;
        }
        System.out.println("The average value of the prime numbers is "+total/primenos.size());
    }
}

这只是一种做法。 如果你谷歌,你可以找到数百种算法。找一个并根据您的需要进行修改。