本帖最后由 宋明文 于 2015-8-6 08:34 编辑
质数只能被1和它自己整除。质数和其他数字一样,排在无穷无尽的自然数里,几乎被相邻的两个数字挤扁,虽然被挤压着,却又藏着一种格格不入的孤独。质数永远是可疑的、不合群的孤独者,所以马蒂亚喜欢质数。有时候,马蒂亚觉得质数一定是误入了某种陷阱,才会被囚禁在自然数的序列里,就像珍珠被囚禁在项链里,永远无法逃离。有时候,马蒂亚又觉得也许质数最大的愿望就是变成一个普通的自然数,和别的数字一样正常,不再那么格格不入,但是,这个愿望永远不可能实现……

大学一年级的时候,马蒂亚学到这样一个知识点:质数中还有一些更为特殊的数字,数学家们称之为“孪生质数”。每一对孪生质数的位置相差不远,几乎可以说是邻居,但它们之间却总会插进一个偶数,硬生生把它们隔开。比如11和13、17和19、41和43都是孪生质数。如果你继续观察下去,就会发现孪生质数变得越来越少。越来越多孤立的质数,存在于这个寂静的谜一样的空间里。越观察,你越会产生一个绝望的预感:之前发现的那些孪生质数也许只是偶然的巧合,而孤独、彻底的孤独,才是一个质数真正的宿命。但是,就在你准备放弃,觉得再也没有必要继续观察下去的时候,你又会碰到一对孪生质数,它们紧紧地依偎在一起,对抗着周围的冰冷和绝望。数学家们相信,不管你观察到哪里,前方一定还有更多的孪生质数,虽然没有人知道,下一对孪生质数会出现在哪里,但我们总会找到它们。 马蒂亚觉得,他和爱丽丝就是一对孪生质数。他们都很孤独,他们同样迷失在这个冰冷的世界里,他们是彼此唯一的安慰,但他们之间仍隔着不可逾越的障碍,他们永远无法真正地紧挨着彼此。
——《质数的孤独》
下面我给大家带来我自己编写的打印孪生质数的方法:
import java.util.Scanner;//导包
class SearchTime
{
public static void main(String[] args)
{ System.out.println("***************输入任意大于 5 的整数***************");
Scanner sc=new Scanner(System.in);
int num=sc.nextInt();//接收键盘录入数据
long start=System.currentTimeMillis();//本程序可以用来简单检测设备性能,所以定义了获取运行时间的代码。
search(num);
long end=System.currentTimeMillis();
System.out.println("运行时间:"+(end-start)+"毫秒");
}
public static void search(int num)
{
int[] arr = new int [num];//建立一维数组储存质数
int count = 0;
q:for (int x=3;x<=num ;x++ )
{
int a=2;
while (a<x)
{
if (x%a==0)//循环遍历所有的可能约数,有大于2的约数跳出while循环。
break;
else
{
a++;
if(a>(int)(Math.sqrt(x)))
{
arr[count++]=x;//找出质数后存进数组。
continue q;
}
}
}
}
//打印孪生质数
for (int x=0;x<arr.length-1 ;x++ )
{
if ( (arr[x+1]-arr[x]) == 2 )
{
System.out.print("("+arr[x]+","+arr[x+1]+")"+"\t");
}
}
}
}
刚学习不久,若有漏洞,请见谅;若大神有更好算法,还请赐教。
|
|