素数程序不起作用
Prime number program does not work
我正在尝试在 Java 中制作一个简单的程序,它将输出所有素数(跳过数字 2)直到数字 n
。它不起作用,我没有想法。如果有人可以看一下我的代码并告诉我问题出在哪里,我将不胜感激。
public class PrimeNum {
public static void main(String[] args) {
int n = 50;
int notAPrime = 0;
System.out.println("All prime numbers before number " +n+ " are : ");
for(int i = n; i > 2; i--){
for(int j = 2; j < i; j++){
if(i % j == 0){
notAPrime++;
}
}
if(notAPrime == 0){
System.out.println(i);
notAPrime = 0;
}
}
}
}
您的 for 循环中缺少 "break"。
public class primeNum {
public static void main(String[] args) {
int n=50;
int notAPrime=0;
System.out.println("All prime numbers before number " +n+ " are : ");
for(int i=n; i>2; i--){
for(int j=2; j<i; j++){
if(i%j==0){
notAPrime++;
break; //your program is missing this statement
}
}
if(notAPrime==0){
System.out.print(i + " ");
}
notAPrime=0; //In your program it is inside the if statement which makes it incorrect.
}
}
}
输出:
数字 50 之前的所有质数是:
47 43 41 37 31 29 23 19 17 13 11 7 5 3
您可以通过进行以下更改来提高程序的效率:
public class primeNum {
public static void main(String[] args) {
int n=50;
int notAPrime=0;
System.out.println("All prime numbers before number " +n+ " are : ");
for(int i=n; i>2; i--){
if(i%2==0){
continue;
}
for(int j=3; j<i; j+=2){
if(i%j==0){
notAPrime++;
break;
}
}
if(notAPrime==0){
System.out.print(i + " ");
}
notAPrime=0;
}
}
}
只需在 for(int i = n; i > 2; i--)
内声明 notAPrime
使其成为本地的每个 i - 候选素数。
现在你增加 notAPrime
并且永远不会将其重置为零。
试试这个
public class primeNum {
public static void main(String[] args) {
int n = 50;
boolean prime;
System.out.println("All prime numbers before number " +n+ " are : ");
for(int i = n; i > 2; i--){
prime = true;
for(int j = 2; j < i; j++){
if(i % j == 0){
prime = false;
}
}
if(prime){
System.out.println(i);
}
}
}
}
请注意,我将您的 "notAPrime" 变量从 int 更改为 boolean 并更改为一个可以告诉您其含义的名称。如果你只增加 "notAPrime" 整数,你永远不会得到任何想要的结果。
顺便说一下,这是一个 修补程序 ,您得到了更正的代码的第一种形式。请记住,2 也是质数,您的代码会忽略它。
再多做一点 ;)
我正在尝试在 Java 中制作一个简单的程序,它将输出所有素数(跳过数字 2)直到数字 n
。它不起作用,我没有想法。如果有人可以看一下我的代码并告诉我问题出在哪里,我将不胜感激。
public class PrimeNum {
public static void main(String[] args) {
int n = 50;
int notAPrime = 0;
System.out.println("All prime numbers before number " +n+ " are : ");
for(int i = n; i > 2; i--){
for(int j = 2; j < i; j++){
if(i % j == 0){
notAPrime++;
}
}
if(notAPrime == 0){
System.out.println(i);
notAPrime = 0;
}
}
}
}
您的 for 循环中缺少 "break"。
public class primeNum {
public static void main(String[] args) {
int n=50;
int notAPrime=0;
System.out.println("All prime numbers before number " +n+ " are : ");
for(int i=n; i>2; i--){
for(int j=2; j<i; j++){
if(i%j==0){
notAPrime++;
break; //your program is missing this statement
}
}
if(notAPrime==0){
System.out.print(i + " ");
}
notAPrime=0; //In your program it is inside the if statement which makes it incorrect.
}
}
}
输出: 数字 50 之前的所有质数是: 47 43 41 37 31 29 23 19 17 13 11 7 5 3
您可以通过进行以下更改来提高程序的效率:
public class primeNum {
public static void main(String[] args) {
int n=50;
int notAPrime=0;
System.out.println("All prime numbers before number " +n+ " are : ");
for(int i=n; i>2; i--){
if(i%2==0){
continue;
}
for(int j=3; j<i; j+=2){
if(i%j==0){
notAPrime++;
break;
}
}
if(notAPrime==0){
System.out.print(i + " ");
}
notAPrime=0;
}
}
}
只需在 for(int i = n; i > 2; i--)
内声明 notAPrime
使其成为本地的每个 i - 候选素数。
现在你增加 notAPrime
并且永远不会将其重置为零。
试试这个
public class primeNum {
public static void main(String[] args) {
int n = 50;
boolean prime;
System.out.println("All prime numbers before number " +n+ " are : ");
for(int i = n; i > 2; i--){
prime = true;
for(int j = 2; j < i; j++){
if(i % j == 0){
prime = false;
}
}
if(prime){
System.out.println(i);
}
}
}
}
请注意,我将您的 "notAPrime" 变量从 int 更改为 boolean 并更改为一个可以告诉您其含义的名称。如果你只增加 "notAPrime" 整数,你永远不会得到任何想要的结果。 顺便说一下,这是一个 修补程序 ,您得到了更正的代码的第一种形式。请记住,2 也是质数,您的代码会忽略它。 再多做一点 ;)