java中的N素数
所以我用java编写了这段代码,它应该在屏幕上输出从1到n的数字(由用户给出),并且应该在素数附近写“-prime”java中的N素数,java,Java,所以我用java编写了这段代码,它应该在屏幕上输出从1到n的数字(由用户给出),并且应该在素数附近写“-prime” import java.util.Scanner; public class primeMass { public static void main(String args[]) { Scanner sc = new Scanner(System.in); int n; int i,j; Syste
import java.util.Scanner;
public class primeMass {
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
int n;
int i,j;
System.out.print("Dati n: ");
n = sc.nextInt();
for(i=1;i<=n;i++)
for(j=2;j<=n/2;j++)
{
if(i%j==0)
System.out.println(i);
else System.out.println(i +"-prime");
}}
}
我是新手,我真的在努力解决我的算法,你能告诉我应该如何改变我的程序,使它输出正确的值,并向我解释我做错了什么吗?多谢各位
更新:
我做到了,谢谢大家帮助我:这就是结果:
导入java.util.Scanner;
公共类素数{
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
int n;
int i,j;
boolean gasit = false;
System.out.print("Dati n: ");
n = sc.nextInt();
for(i=1;i<=n;i++) {
gasit=false;
for(j=2;j*j<=i;j++)
{
if(i%j==0) gasit=true;}
if(!gasit) {System.out.println(i+"-prime");}
else {
System.out.println(i);}
}
}
publicstaticvoidmain(字符串参数[])
{
扫描仪sc=新的扫描仪(System.in);
int n;
int i,j;
布尔gasit=false;
系统输出打印(“数据编号:”);
n=sc.nextInt();
对于(i=1;i而言,问题在于第二个循环一直持续到n/2
,它应该一直持续到i/2
,以检查i
是否为素数。正如注释中所建议的,素数检查算法的更优化版本一直持续到sqrt(i)
下一个问题是,您以错误的方式得出结论,如果在第一种情况下如果(i%j==0)
您说不为素数,否则您说它为素数,这是不必要的。您应该迭代[2:i/2]之间的整个值间隔
得出结论,i
是素数。在内部循环的每次迭代中都会打印一些内容
相反,您应该在所有迭代完成后打印一些内容,例如
boolean found = false;
for(j=2;j<=n/2;j++) {
if(i%j==0) found = true;
}
if (!found) {
System.out.println(i + "-prime");
} else {
System.out.println(i);
}
尝试j第1步:正确的格式。第2步:调试代码,设置一个断点,然后逐条执行代码语句,这样您就可以了解程序的行为方式,然后可以对其进行更改。我今天已经学会了调试,但我仍然不明白为什么在打印完代码后,它会在循环中再次返回他首先问我(例如)“但是我仍然不明白为什么在打印第一个i
之后它会再次回到循环中”为什么你认为循环应该停止迭代?你能解释一下你期望这种行为是什么吗?也请使用你的编辑器正确缩进你的代码(大多数IDE都有这样的选项,可以根据标准/设置对代码进行格式化/缩进,这样习惯了的人就更容易阅读了——更不用说缩进可以帮助我们看到代码块的范围了)。顺便说一句,如果您有解决方案,请不要将其放在问题部分,而是将其作为答案发布(您应该查看底部的表格部分以获取答案)。发布答案时,请使用选项并将其从问题部分删除。
boolean found = false;
for(j=2;j<=n/2;j++) {
if(i%j==0) found = true;
}
if (!found) {
System.out.println(i + "-prime");
} else {
System.out.println(i);
}
for(j=2; j*j<=i; j++) {