性感素数特定印花和理货

时间:2014-04-16 02:51:47

标签: java

好的,所以我的代码很好,但是我不需要只显示素数而需要它来显示匹配的对和有多少对,我知道这可能需要进入过程筛,我总结我将需要一个计数系统,但我不明白如何将它们成对打印出来。

这是打印出来的方式

以下是1到42范围内的所有性感素数对,每行一对:

5 and 11 
7 and 13 
11 and 17 
13 and 19 
17 and 23 
23 and 29 
31 and 37 

显示了7对性感素数对。

import java.util.Scanner;

public class aleko_Sieve
{

Scanner in = new Scanner(System.in);
boolean primes [] = new boolean [50001];
int upperbnd;
int lowerbnd;

public aleko_Sieve ()
{

    primes[0] = false;
    primes[1] = false;

    for (int i = 2; i < primes.length; i++)
    {
        primes[i] = true;

    }

    getLower();
    getUpper();
    processSieve();
    showPrimes();
}

public void processSieve()
{

    for (int i =2; (i * i) <= upperbnd; i++)
    {

        for (int j = (i * i); j <= upperbnd; j = j + i)
        {

            primes[j] = false;
        }
    }
}

public void getLower()
{
    int x=0;
    do
    {
    System.out.println("Please enter a lower boundary ( 1 - 50000): ");
    lowerbnd = in.nextInt();
    if (( lowerbnd < 1) || (lowerbnd > 50000))
    {
        System.out.println("Please enter a valid number");
        x = 1;
    }
    if (( lowerbnd > 1) || (lowerbnd < 50000))
    {
        x = 0;
    }
    }
    while ( x == 1);
}

public void getUpper()
{
    int x=0;
    do
    {
    System.out.println("Please enter a upper boundary ( 1 - 50000): ");
    upperbnd = in.nextInt();
    if (( upperbnd < 1) || (upperbnd > 50000))
    {
        System.out.println("Please enter a valid number");
        x = 1;
    }
    if (( upperbnd > 1) || (upperbnd < 50000))
    {
        x = 0;
    }
    }
    while ( x == 1);
}

public void showPrimes()
{
    for (int i = 2; i < upperbnd; i++)
    {
        if (primes[i] == true)
        {
            System.out.println( i + " is prime");
        }
    }
}

public static void main (String args[])
{
    aleko_Sieve p = new aleko_Sieve();
}
}

2 个答案:

答案 0 :(得分:1)

当您打印素数时,查看指数6是否低于您刚刚找到的当前素数并打印它们。

//if found prime
if (i > 6)
{
    if (prime[i-7]==true)
    //print both primes
}

答案 1 :(得分:0)

您可以循环遍历素数数组,如下所示:

public void showSexy()
{
    int countPairs = 0;
    System.out.println("Here are all of the sexy prime pairs in the range 1 to 42, one pair per line:");
    for (int i = 2; i < upperbnd - 6; i++)
    {
        if (primes[i] == true && primes[i+6]== true)
        {
            countPairs++;
            System.out.println( i + " and " + (i+6));
        }
    }
    System.out.println("There were " + countPairs + " sexy prime pairs displayed");
}

需要注意的事项:

  1. 循环的上限为upperbnd - 6,否则你找不到另一个6更大的素数
  2. 创建一个countPairs变量,每次找到一对时都会递增
  3. 找到它时打印对(你已经有true / false的数组,所以很容易找到它们)
  4. 完成整个列表后打印对的数量