Java 素数函数仅打印2和3 包素数; 公共类素数{ 公共静态void main(字符串参数[]){ int标志=0; /* 对于(inti=2;i

Java 素数函数仅打印2和3 包素数; 公共类素数{ 公共静态void main(字符串参数[]){ int标志=0; /* 对于(inti=2;i,java,primes,Java,Primes,好的,解释起来并不难(虽然我不知道为什么要写这段代码,但它肯定不是基本测试) 在内部循环中,测试当前数字是否可被数字2到10整除(计算不除i的数字) 对于i=2,只有2除以i,因此在内环之后,flag=8(3..10)。因此,您可以打印2并重置flag 对于i=3,只有3除以i,因此在内环之后,flag=8(2和4..10)。因此,打印3并重置flag) 对于i=4,2和4都将i分开,因此在内部循环之后,flag=7。您不打印任何内容,也不重置flag 对于i=5,只有5除以i。由于您没有重置标

好的,解释起来并不难(虽然我不知道为什么要写这段代码,但它肯定不是基本测试)

在内部循环中,测试当前数字是否可被数字2到10整除(计算不除
i
的数字)

对于
i=2
,只有2除以
i
,因此在内环之后,
flag=8
3..10
)。因此,您可以打印
2
并重置
flag

对于
i=3
,只有3除以
i
,因此在内环之后,
flag=8
2
4..10
)。因此,打印
3
并重置
flag

对于
i=4
2
4
都将
i
分开,因此在内部循环之后,
flag=7
。您不打印任何内容,也不重置
flag

对于
i=5
,只有5除以
i
。由于您没有重置
标志
,在内部循环之后将是
标志=15
。您将永远不会重置
标志
,因此不再打印任何数字。

这应该可以:

package PrimeNum;

public class primeNum {
public static void main(String args[]){
    int flag = 0;
    /*
    for(int i = 2; i <= 100; i++){
        if(i % 2 != 0 && i % 3 != 0 && i % 4 != 0 && i % 5 != 0 && 
                i % 6 != 0 &&  i % 7 != 0 && i % 8 != 0 && i % 9 != 0 && i % 10 != 0 ){
            System.out.print(i + " ");
        }
    }
    */
    System.out.println();

    for(int i = 2; i <= 100; i++){

        for(int j = 2; j <= 10; j++){
            if(i % j != 0) { 
                flag++;
            }
        }

        if(flag == 9 || flag == 8){
            System.out.print(i + " ");
            flag = 0;
        }
    }
}
包素数;
公共类素数{
公共静态void main(字符串参数[]){
int标志=0;
System.out.println();
对于(inti=2;i这可能会对您有所帮助

public static void main(String[] args) {
        int flag = 0;
        for (int i = 2; i <= 100; i++) {
            flag = 0;
            for (int j = 2; j <= i - 1; j++) {
                if (i % j != 0) {
                    flag++;
                }
            }

            if (flag == i - 2) {
                System.out.print(i + " ");
            }
        }
    }
那么:

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 

你的想法是测试每个数字,计算作为除数的数字,然后在这个数字与标准匹配时打印出来,这很好,但我会稍微颠倒一下测试

素数正好有两个正因子,1和数本身

如果你测试2和1之间的每一个数,你应该精确地找到0个除数。这对每个数都是正确的,你不必知道有多少除数不是除数,你也不必测试每个数上的每个除数,25不能是10的除数,因为它更大

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
公共静态无效simplePrintPrimesUpTo(int max){
//测试2和最大值(含)之间的每个数字

对于(int number=2;number您的程序应该做什么?为什么要检查
flag==9 | | flag==8
?我怀疑问题是3后的flag>9,因此您永远不会得到另一个输出。如果您不给我们代码,您将无法得到答案,因为此时我们无法编译您的代码来检查它EI不能被值j整除,它将增加标志以指示它不能被整除的数字的数量。因为您只需要2-10(9个数字)中的最小值若要将一个数字除以以查看它是否为素数,当程序意识到该数字不能被上述数字整除时,它会将其打印出来。对于小于10的数字,我包含了8。但是,它只打印2和3。顺便说一句,为什么您在这里发布了注释代码?@downvoter关心解释吗?OP询问为什么只打印2和3。嗯,正是为了这个原因这就是原因。@Heuster的解释是正确的,为什么会投反对票?我投了赞成票。@Aquillo你有什么问题???谁在这里使用字符串作为布尔值???最好睁开眼睛,自己运行这个。你崇拜布尔值吗?当布尔值显然是更好的选择时,你不应该滥用字符串。我不会写任何测试对于这一点,但这不可能是好的表现。@Aquillo这不值得投反对票,因为这不是一个错误的答案或误导某些人one@Aquillo-使用字符串作为信息用途实际上对这一点很有帮助,使代码中发生的事情变得非常清楚-我投了赞成票!我同意,使用
String
在这里不合适。
布尔isPrime
会更好。
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 
public static void main(String args[]){

    System.out.println();

    for(int i = 2; i <= 100; i++){

        int flag = 0;

        for(int j = 2; j <= i; j++){
            if(i % j == 0) {
                flag++;
            }
        }

        if(flag == 1){
            System.out.print(i + " ");
        }
    }
}
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
public static void simplePrintPrimesUpTo(int max) {
    // test every number between 2 and max inclusive
    for (int number = 2; number <= max; number++) {
        int foundDivisors = 0;

        // test every divisor between 2 and 1 less than the current number
        for (int divisor = 2; divisor < number; divisor++) {
            if (number % divisor == 0) {
                foundDivisors++;
            }
        }

        if (foundDivisors == 0)
            System.out.print(number + " ");
    }
    System.out.println();
}
(divisor)^2 <= (sqrt(number))^2
(divisor)^2 <= number
public static void optimizedPrintPrimesUpTo(int max) {
    nextNumber:
    for (int number = 2; number <= max; number++) {

        for (int divisor = 2; (divisor * divisor) <= number; divisor++) {
            if (number % divisor == 0) {
                // skip testing this number, continue in the outer loop
                continue nextNumber;
            }
        }

        System.out.print(number + " ");
    }
    System.out.println();
}