Java 素数函数仅打印2和3 包素数; 公共类素数{ 公共静态void main(字符串参数[]){ int标志=0; /* 对于(inti=2;i
好的,解释起来并不难(虽然我不知道为什么要写这段代码,但它肯定不是基本测试) 在内部循环中,测试当前数字是否可被数字2到10整除(计算不除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。由于您没有重置标
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();
}