在Java中测试素数-添加附加条件
我是初学者。所以我想写一个程序,打印出用户输入的所有素数。例如,用户输入5,程序输出2和3。然而,我所理解的是,如果我想让程序打印出用户输入的数字是否为素数(简单的是或否),如果输入的数字大于,比方说50,该怎么办。以下是第一部分的代码:在Java中测试素数-添加附加条件,java,Java,我是初学者。所以我想写一个程序,打印出用户输入的所有素数。例如,用户输入5,程序输出2和3。然而,我所理解的是,如果我想让程序打印出用户输入的数字是否为素数(简单的是或否),如果输入的数字大于,比方说50,该怎么办。以下是第一部分的代码: public class Primes { public static void main(String args[]) { System.out.println("All primes up to: ");
public class Primes {
public static void main(String args[]) {
System.out.println("All primes up to: ");
int num = new Scanner(System.in).nextInt();
System.out.println("Prime numbers from 1 to " + num + " are: ");
for(int number = 2; number<=num; number++){
if(isPrime(number)){
System.out.println(number);
}
}
}
public static boolean isPrime(int number){
for(int i=2; i<number; i++){
if(number%i == 0){
return false;
}
}
return true;
}
}
公共类素数{
公共静态void main(字符串args[]){
System.out.println(“所有素数到:”);
int num=新扫描仪(System.in).nextInt();
System.out.println(“从1到“+num+”的素数是:”;
对于(整数=2;数字
然而,我正在努力解决的问题是,如果我想让程序打印出用户输入的数字是否为素数(简单的是或否)
您当前的isPrime
功能似乎正常工作,因此只需输入一个数字并测试它即可
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
System.out.println("Enter a number (is it prime): ");
int num = scanner.nextInt();
if (isPrime(num)) {
System.out.printf("%d yes%n", num);
} else {
System.out.printf("%d no%n", num);
}
}
或者用三元
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
System.out.println("Enter a number (is it prime): ");
int num = scanner.nextInt();
System.out.printf("%d %s%n", num, isPrime(num) ? "yes" : "no");
}
编辑根据您的评论,将打印顺序移动到方法
public static void primesUpTo(int num) {
System.out.println("Prime numbers from 1 to " + num + " are: ");
for (int number = 2; number <= num; number++) {
if (isPrime(number)) {
System.out.println(number);
}
}
}
publicstaticvoidprimesupto(int-num){
System.out.println(“从1到“+num+”的素数是:”;
用于(整数=2;数字50){
System.out.printf(“%d%s%n”,num,isPrime(num)?“是”:“否”);
}否则{
primesUpTo(num);//试试这个
int j = 2; //variable
int result = 0; //variable
int number = 0; //variable
Scanner reader = new Scanner(System.in); //Scanner object
System.out.println("Please enter a number: "); //Instruction
number = reader.nextInt(); //Get the number entered
while (j <= number / 2) //start loop, during loop j will become each number between 2 and
{ //the entered number divided by 2
if (number % j == 0) //If their is no remainder from your number divided by j...
{
result = 1; //Then result is set to 1 as the number divides equally by another number, hergo
} //it is not a prime number
j++; //Increment j to the next number to test against the number you entered
}
if (result == 1) //check the result from the loop
{
System.out.println("Number: " + number + " is Not Prime."); //If result 1 then a prime
}
else
{
System.out.println("Number: " + number + " is Prime. "); //If result is not 1 it's not a prime
}
int j=2;//变量
int result=0;//变量
int number=0;//变量
扫描仪阅读器=新扫描仪(System.in);//扫描仪对象
System.out.println(“请输入一个数字:”;//说明
number=reader.nextInt();//获取输入的数字
而(j编辑:
public class PrimeSieve {
public static void main(String[] args) {
int N = Integer.parseInt(args[0]);
// initially assume all integers are prime
boolean[] isPrime = new boolean[N + 1];
for (int i = 2; i <= N; i++) {
isPrime[i] = true;
}
// mark non-primes <= N using Sieve of Eratosthenes
for (int i = 2; i*i <= N; i++) {
// if i is prime, then mark multiples of i as nonprime
// suffices to consider mutiples i, i+1, ..., N/i
if (isPrime[i]) {
for (int j = i; i*j <= N; j++) {
isPrime[i*j] = false;
}
}
}
// count primes
int primes = 0;
for (int i = 2; i <= N; i++) {
if (isPrime[i]) primes++;
}
System.out.println("The number of primes <= " + N + " is " + primes);
}
}
您当前的代码似乎工作正常。
根据您在其中一条评论中提到的疑问:Yes,但我在哪里添加if语句来执行以下操作:如果输入的数字小于50,则程序将打印出输入数字之前的所有素数。如果用户输入的数字大于50,则只会告知输入的数字是否为素数(简单地说“这是质数”或“不,这不是质数”)。希望这能让事情变得更清楚
您需要在接受输入后进行检查:
int num = new Scanner(System.in).nextInt();
if( number > 50 )
{
if(isPrime(number))
{
// print out is prime
}
// print out it is not prime
}
else
{
System.out.println("Prime numbers from 1 to " + num + " are: ");
for(int number = 2; number<=num; number++){
if(isPrime(number)){
System.out.println(number);
}
}
}
删除(筛选)2的倍数,结果是:
2 3 5 7 9 11 13 15 17 19 21 23 25 27 29
列表中2之后的第一个数字是3;从列表中选择3的倍数可得到:
2 3 5 7 11 13 17 19 23 25 29
列表中3之后的第一个数字是5;从列表中删除剩余的5的倍数:
2 3 5 7 11 13 17 19 23 29
列表中5之后的第一个数字是7,但7的平方是49,大于30,因此过程结束。最后的列表包含所有小于或等于30的素数
这是附加的代码以供参考(免责声明:我是从网站上获取此代码的。只是将其粘贴在这里以获得更直接的可见性)
代码:
public class PrimeSieve {
public static void main(String[] args) {
int N = Integer.parseInt(args[0]);
// initially assume all integers are prime
boolean[] isPrime = new boolean[N + 1];
for (int i = 2; i <= N; i++) {
isPrime[i] = true;
}
// mark non-primes <= N using Sieve of Eratosthenes
for (int i = 2; i*i <= N; i++) {
// if i is prime, then mark multiples of i as nonprime
// suffices to consider mutiples i, i+1, ..., N/i
if (isPrime[i]) {
for (int j = i; i*j <= N; j++) {
isPrime[i*j] = false;
}
}
}
// count primes
int primes = 0;
for (int i = 2; i <= N; i++) {
if (isPrime[i]) primes++;
}
System.out.println("The number of primes <= " + N + " is " + primes);
}
}
公共类PrimeSieve{
公共静态void main(字符串[]args){
int N=Integer.parseInt(args[0]);
//最初假设所有整数都是素数
布尔值[]isPrime=新布尔值[N+1];
对于(int i=2;i如果我正确理解问题:
- 若用户输入的数字小于或等于50,则打印所有小于该数字的素数
- 否则,如果输入的数字是素数,只需写入即可
使用已存在的isPrime()
方法:
int num = new Scanner(System.in).nextInt();
if (num <= 50) {
System.out.println("Prime numbers from 1 to " + num + " are: ");
for (int number = 2; number <= num; number++) {
if (isPrime(number)) {
System.out.println(number);
}
}
} else { //num > 50
if(isPrime(num)) {
System.out.println(num + " is prime.");
} else {
System.out.println(num + " isn't prime.");
}
}
int num=新扫描仪(System.in).nextInt();
if(num)您需要一个if
语句来检查数字是否大于50…您尝试了什么?if(isPrime(number)&&number>50){…}同样,在isPrime()中
方法,您只需在循环中检查数字/2。大于输入数字一半的数字永远不会是一个因子。我尝试添加if,但它不起作用,因为我不知道确切的位置。此外,还有一些提示:从3开始数字,然后增加2(因为所有的even都不是素数),当你检查一个数是否为素数时,你只需要迭代到该数的平方根,因为一个数的因子是围绕平方根镜像的。是的,但是我应该在哪里添加if语句来执行以下操作:如果输入的数小于50,那么程序将打印出所有的素数,直到输入的数。如果用户输入的数字大于50,它只告诉用户输入的数字是否为素数(简单地说“它是素数”或“不,它不是素数”).希望这能让事情变得更清楚:p.@arri根据您的评论进行了编辑。请使用容量更大的数据类型,如long”。如果这还不够,那么您可以考虑使用
BigInt`。
public class PrimeSieve {
public static void main(String[] args) {
int N = Integer.parseInt(args[0]);
// initially assume all integers are prime
boolean[] isPrime = new boolean[N + 1];
for (int i = 2; i <= N; i++) {
isPrime[i] = true;
}
// mark non-primes <= N using Sieve of Eratosthenes
for (int i = 2; i*i <= N; i++) {
// if i is prime, then mark multiples of i as nonprime
// suffices to consider mutiples i, i+1, ..., N/i
if (isPrime[i]) {
for (int j = i; i*j <= N; j++) {
isPrime[i*j] = false;
}
}
}
// count primes
int primes = 0;
for (int i = 2; i <= N; i++) {
if (isPrime[i]) primes++;
}
System.out.println("The number of primes <= " + N + " is " + primes);
}
}
int num = new Scanner(System.in).nextInt();
if (num <= 50) {
System.out.println("Prime numbers from 1 to " + num + " are: ");
for (int number = 2; number <= num; number++) {
if (isPrime(number)) {
System.out.println(number);
}
}
} else { //num > 50
if(isPrime(num)) {
System.out.println(num + " is prime.");
} else {
System.out.println(num + " isn't prime.");
}
}