Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对于素数,这是不同的逻辑吗_Java_Primes - Fatal编程技术网

Java 对于素数,这是不同的逻辑吗

Java 对于素数,这是不同的逻辑吗,java,primes,Java,Primes,我是java新手。我正在尝试创建一个程序来查找素数。我知道有很多方法可以得到素数,但今天我编写了一个程序,我只是检查了如果给定的数除以2,3,5或7,那么它就不是素数。这个逻辑是正确的还是不足以计算素数。供参考;下面是代码,令人惊讶的是它的计算结果是正确的 import java.util.Scanner; public class Prime { public static void main(String[] args) { Scanner sc = ne

我是java新手。我正在尝试创建一个程序来查找素数。我知道有很多方法可以得到素数,但今天我编写了一个程序,我只是检查了如果给定的数除以2,3,5或7,那么它就不是素数。这个逻辑是正确的还是不足以计算素数。供参考;下面是代码,令人惊讶的是它的计算结果是正确的

import java.util.Scanner;
public class Prime 
{
    public static void main(String[] args) 
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter number");
        int n = sc.nextInt();
        if(n==1) {
            System.out.println(n+" is not prime");
        } else if(n==2) {
            System.out.println(n+" is prime");
        } else if(n%2==0 || n%3==0 || n%5==0 || n%7==0) {
            System.out.println(n+" is not prime");
        } else {
            System.out.println(n+" is prime");
        }
    }
}
这个逻辑是正确的还是不足以计算素数

不,您只测试可被(小)素数子集整除的数。对于较大的数字,当某些数字不是素数时,它会错误地将其报告为素数

此外,一些小素数被错误地报告为非素数

供参考;下面是代码,令人惊讶的是它的计算结果是正确的

import java.util.Scanner;
public class Prime 
{
    public static void main(String[] args) 
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter number");
        int n = sc.nextInt();
        if(n==1) {
            System.out.println(n+" is not prime");
        } else if(n==2) {
            System.out.println(n+" is prime");
        } else if(n%2==0 || n%3==0 || n%5==0 || n%7==0) {
            System.out.println(n+" is not prime");
        } else {
            System.out.println(n+" is prime");
        }
    }
}
这仅仅意味着你没有测试一个不是2个(或更多)大于7的素数乘积的数字。试试121


或者是3、5或7。这是错误的!首先,3,5,7都是pirme,查看代码,如果输入3,本程序将打印“3不是素数”,然后输入5,7,跟后面一样,所以逻辑不对

不,这还不够。对于较小的数字,它会起作用,但随后会出现一个数字,它不是这些数字的倍数,而是11、13、17的倍数,以此类推。您必须检查所有小于数字平方根的素数。
正如尼科指出的,它也会将一些素数标记为非素数

更好地检查,这是获得质数和更快性能的最佳解决方案。您可能无法立即获得它,但它是值得的

我认为这段代码对素数很有效。如果有什么需要改进的,请告诉我



我认为这是对的。我们的代码使用2,3,5和7的结果是一样的。但也许你们的问题是这个网站关闭?我想,为了确保我真的素数,你们可以写以下代码:inti,m=0,flag=0;int n=17//要检查的编号m=n/2;对于(i=2;这是一个完美的例子,说明了为什么不能信任开发人员来测试他们自己的代码:-)@user3622254-尝试阅读答案:-)谢谢大家。现在我知道这个逻辑是完全错误的。121是一个很好的例子,它是11的平方,这个程序仍然显示121为素数,这是错误的@AndrewShepherd哈哈……没错……顺便说一句,我正在申请自动化测试职位。:)3是素数,但它是一个非常小的素数,几乎不算什么。捕捉得好。另一个原因是,不管大小,3是质数。OP的计划有多方面的缺陷。这只是其中之一。143是素数吗?不。代码不完全正确?谢谢你指出。还有其他能准确找出素数的代码吗?很多很多。在这里还有。(顺便说一句,不是我的反对票)。