这个不同的逻辑是否适用于Prime Number

时间:2017-08-02 04:49:33

标签: java primes

我是java的新手。我正在尝试创建一个程序来查找Prime数字。我知道有很多解决方案可以获得素数但今天我编写了一个程序,我只是检查了如果给定的数字除以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");
        }
    }
}

5 个答案:

答案 0 :(得分:4)

  

这个逻辑是否正确或不足以计算素数。

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

另外一些小素数被错误地报告为不是素数。

  

供参考;这是代码,令人惊讶的是它正在评估正确。

这只是意味着你没有测试它的数字是不是2(或更多)质数大于7的乘积。尝试121。

或者3,5或7。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

更好地检查Sieve of Eratosthenes,这是获得素数加上更快性能的最佳解决方案。你可能不会马上得到它,但值得它

答案 4 :(得分:-1)

我认为此代码适用于素数。如果有什么需要改进,请告诉我。

package primenumber;

import java.util.Scanner;

public class PrimeNumber 
{
    public static void main(String[] args) 
    {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter a number");
        int n = input.nextInt();

            if (n==2 || n==3 || n==5|| n==7)
            {
                System.out.printf("%d is a prime number\n", n);
            }
            else if(n%2!=0 && n%3!=0 && 
                    n%5!=0 && n%7!=0 && n%Math.sqrt(n)!=0)
            {
                System.out.printf("%d is a prime number\n", n);
            }

            else
            {
            System.out.printf("%d is not a prime number\n", n);
            }
    }
}