我的具体项目的目标是编写一个程序,提示用户输入两个整数。程序将读取两个整数并确定它们是否为素数。如果他们不是程序将列出因素,否则它将简单地打印“素数”并反复询问用户两个整数。此外,程序应该打印两个给定整数之间的所有数字的因子以及整数本身。它还将给出素数的平均值。
目标是使最终结果看起来像这样(假设两个整数是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 :
现在我不知道我哪里出错了,但我觉得我必须朝着正确的方向前进。如果两个输入都是素数,它将打印素数。如果一个是素数,一个不是,它将做我上面发布的。
感谢任何和所有帮助。谢谢。
答案 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());
}
}
这只是一种做法。 如果你谷歌,你可以找到数百种算法。找一个并根据您的需要进行修改。