如何计算从1到X的整数之和是否为素数

时间:2017-01-26 05:27:46

标签: java

前段时间我遇到了类似这样的问题:

幸运数字是一个数字,其前面的数字(包括其自身)的总和是素数。例如,两个是幸运数字,因为它变为1 + 2.由于这是3,而3是素数,我们可以得出结论,2是幸运数字。

我尝试构建一个简单的代码来查找一些幸运数字

public static void main(String args[]) {
    boolean isPrime = true;
    for(int x = 3; x < 1000; x++) {
        int num = ( (x * (x + 1)) / 2);
        // formula for checking the sum of integers one through x
        for(int i = 2; i < num; i++) {
            if(num % i == 0) {
                isPrime = false;
                // if it's false it is not prime
            }
            if(isPrime == true) {
                System.out.println(x);
                // prints out the original number, the sum of the numbers before it is a prime number
            }
        }
    }
}

换句话说,它应该取一个数字x,将其插入公式中,看看公式返回的数字是否为素数。但是,我得到了很长一段不是素数的数字(比如3,4,5,6,7 ......)。

4 个答案:

答案 0 :(得分:4)

从1到x的整数之和为x *(x + 1)/ 2。

x x + 1是偶数,因此总和总是 2个整数的乘积 - x *((x + 1)/ 2) (x / 2)*(x + 1)。

素数不能作为两个整数的乘积,除非那两个整数是1和它本身,所以,如果x是“幸运的”,那么(x + 1)/ 2 == 1 x / 2 == 1 x + 1 == 1 x == 1,即x为0,1或2.

因为0不算......

1和2是唯一的幸运数字

答案 1 :(得分:1)

只是一个小小的逻辑问题。当它是一个素数时你应该打印一个素数。这意味着它不会除以所有这些数字。所以把它移到循环之外。

for(int x = 3; x < 1000; x++) {

    int num = ( (x * (x + 1)) / 2);
    // formula for checking the sum of integers one through x

    if (num%2 == 0) {
        isPrime = false;
    }

    for(int i = 3; isPrime && i < num ; i += 2) {

        if(num % i == 0) {
            isPrime = false;
            // if it's false it is not prime
        }
    }

    if(isPrime == true) {
        System.out.println(x);
        // prints out the original number, the sum of the numbers before it is a prime number
    }
}

我还添加了一些优化 - 不需要检查n%4,n%6 itd是否为0,当检查是否已经找到一个除数时检查是否除以大数字时也是如此。

另一方面,x > 2是不可能的。 唯一适用的x2

答案 2 :(得分:0)

在你的内部for循环的每一步,你都在检查它是否是素数。因为它默认为素数,如果在第一次检查中没有找到它,则显示。

public static void main(String args[]) {

  boolean isPrime = true;

  for (int x = 3; x < 1000; x++) {

   int num = ((x * (x + 1)) / 2);
   // formula for checking the sum of integers one through x

   for (int i = 2; i < num; i++) {

    if (num % i == 0) {
     isPrime = false;
     // if it's false it is not prime
    }
  }

    if (isPrime == true) { 
     System.out.println(x);
     // prints out the original number, the sum of the numbers before it is a prime number
    }

  }

答案 3 :(得分:0)

这是不可能的。但这是我使用流的解决方案!!

double