好的,所以我的代码很好,但是我不需要只显示素数而需要它来显示匹配的对和有多少对,我知道这可能需要进入过程筛,我总结我将需要一个计数系统,但我不明白如何将它们成对打印出来。
这是打印出来的方式
以下是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();
}
}
答案 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");
}
需要注意的事项:
upperbnd - 6
,否则你找不到另一个6更大的素数countPairs
变量,每次找到一对时都会递增true
/ false
的数组,所以很容易找到它们)