Java 寻找素数
我试着写一些代码,其中包含了一个最大数,并给出了2到最大数之间的所有素数。这几乎是可行的,但我有一个问题,打印所有的素数,但它也打印相同的素数被乘以的结果。例如,它将打印2,3,4,5,7,9,它们都是0到10之间的素数,但它也会打印额外的数字,即2*2、3*3等等。请指导我正确的方向,这样我才能完成这个项目Java 寻找素数,java,Java,我试着写一些代码,其中包含了一个最大数,并给出了2到最大数之间的所有素数。这几乎是可行的,但我有一个问题,打印所有的素数,但它也打印相同的素数被乘以的结果。例如,它将打印2,3,4,5,7,9,它们都是0到10之间的素数,但它也会打印额外的数字,即2*2、3*3等等。请指导我正确的方向,这样我才能完成这个项目 public class PrimeNumbers { public static void main( String[] args ) { int ma
public class PrimeNumbers
{
public static void main( String[] args )
{
int max = 400;
//Runs through all the numbers between 2 and max, checks if
//the number is prime and prints it
for( int num = 2; num < max; ++num )
{
if( isPrimeNumber( num ) )
{
System.out.println( num );
}
}
}
//method to find all prime numbers
public static boolean isPrimeNumber( int number )
{
for( int mod = 2; mod < Math.sqrt( number ); ++mod )
{
if( number % mod == 0 )
{
return false;
}
}
return true;
}
}
公共类素数
{
公共静态void main(字符串[]args)
{
int max=400;
//运行2和max之间的所有数字,检查是否
//数字是素数并打印出来
对于(int num=2;num
您的结束条件是错误的,您需要一直到sqrt(num)
:
for (int mod = 2; mod <= Math.sqrt(number); ++mod)
for(int mod=2;mod对于未来的用户,我发布这个素数程序。您只需给出您希望素数返回的最大值即可
import java.util.Scanner;
public class prim {
public static void main(String[] args) {
int x = 2;
int y = 2;
int i = 0;
int m = 0;
int t = 1;
int j = 2;
int cal = 0;
Scanner keyboard = new Scanner(System.in);
System.out.println("please enter for how many numbers \nyou wanna check if their prime");
m = keyboard.nextInt();
for (i = 0; i <= m; i++) {
while (j <= x) {
t = x % y;
if (t == 0) {
cal = cal + 1;
}
y++;
j++;
}
if (cal == 1) {
System.out.println("Prime number: " + x);
}
cal = 0;
x++;
y = 2;
j = 2;
}
}
}
import java.util.Scanner;
公共类prim{
公共静态void main(字符串[]args){
int x=2;
int y=2;
int i=0;
int m=0;
int t=1;
int j=2;
int-cal=0;
扫描仪键盘=新扫描仪(System.in);
System.out.println(“请输入要检查其素数的数字数量”);
m=键盘.nextInt();
对于(i=0;i 4不是素数,9不是素数…即使编译器可能会内联Math.sqrt
调用,我建议您自己做。我知道这一点,这就是为什么我说它会打印所有素数加上一些额外的非素数。这个问题是问为什么“素数”数字在(2*2等)之后打印你的答案没有解决这个问题它确实解决了这个问题,OP的方法只对平方数是错误的,这就是为什么他对4和9得到true
的原因。是的,这确实解决了我的问题,仍然不确定为什么,但效果很好now@ed1234567:您可以查看示例4
和9
的原因。此处Math.sqrt(数字)
将是2
和3
,因此循环将在1
和2
结束,因此将永远找不到唯一的分隔符。太棒了,感谢您的帮助。我完全理解为什么它以前不起作用。请注意,此实现在时间复杂性方面效率低下。筛选方法要快得多。