黑马程序员技术交流社区

标题: 《质数的孤独》——孪生质数 [打印本页]

作者: 宋明文    时间: 2015-7-30 10:04
标题: 《质数的孤独》——孪生质数
本帖最后由 宋明文 于 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");
                        }
                }
        
        }
}

刚学习不久,若有漏洞,请见谅;若大神有更好算法,还请赐教。



作者: Dark_Knight    时间: 2015-7-30 10:32
         会玩
作者: Dark_Knight    时间: 2015-8-1 21:27
谁是孤独 阿
作者: 曾勇    时间: 2015-8-1 21:28
我来顶一个
作者: 殷俊    时间: 2015-8-1 21:44
经常练练,有益于身心健康
作者: 宛康0723    时间: 2015-8-1 21:49
打酱油打酱油打酱油的
作者: Hider    时间: 2015-8-1 23:31
够文艺。。。
作者: 宋明文    时间: 2015-8-2 00:14
Hider 发表于 2015-8-1 23:31
够文艺。。。

谢谢啊!!!!!!!!!!!!!
作者: 娜妞子~    时间: 2015-8-2 07:02
是挺文艺范
作者: 宋明文    时间: 2015-8-11 00:25
娜妞子~ 发表于 2015-8-2 07:02
是挺文艺范

把学到的,和之前看过的书结合到一起就成了这种效果{:2_32:}
作者: 宋明文    时间: 2015-8-14 21:44
自顶一个。。。。。。。。。。。
作者: 宋明文    时间: 2015-8-15 00:54
《质数的孤独》
作者: 宋明文    时间: 2015-8-16 20:12
自顶一个。。。。。。。。。。。
作者: 宋明文    时间: 2015-8-17 22:28
支持一下黑马,嘿嘿
作者: 宋明文    时间: 2015-8-21 00:11

支持一下黑马,嘿嘿




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2