| 赞 | 153 |
| VIP | |
| 好人卡 | |
| 积分 | 93 |
| 经验 | |
| 最后登录 | 2024-5-6 |
| 在线时间 | 2504 小时 |
- 梦石
- 0
- 星屑
- 9292
- 在线时间
- 2504 小时
- 注册时间
- 2011-5-20
- 回帖
- 14521

|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有账号?注册会员
×
一般來說是判斷n從2到n有沒有其他整數解
但是偶然搜到java的求質數(素數)的腳本
java中判断素数的六种方法 - CSDN博客
http://blog.csdn.net/kp_liu/article/details/37569507
該地址中判斷質數(素數)有6個循序漸進得來的方法,似乎後面的方法效率會更高一些
点击展开/收起
- 1. 根据概念判断:如果一个正整数只有两个因子, 1和p,则称p为素数
- 2. 改进, 去掉偶数的判断
- 3. 进一步减少判断的范围
- 定理: 如果n不是素数, 则n有满足1< d<=sqrt(n)的一个因子d.
- 证明: 如果n不是素数, 则由定义n有一个因子d满足1< d< n.
- 如果d大于sqrt(n), 则n/d是满足1< n/d<=sqrt(n)的一个因子.
- 4. 剔除因子中的重复判断.
- 定理: 如果n不是素数, 则n有满足1< d<=Math.sqrt(n)的一个"素数"因子d.
- 证明: I1. 如果n不是素数, 则n有满足1< d<=Math.sqrt(n)的一个因子d.
- I2. 如果d是素数, 则定理得证, 算法终止.
- I3. 令n=d, 并转到步骤I1.
- 由于不可能无限分解n的因子, 因此上述证明的算法最终会停止.
- 5. 构造素数序列primes: 2, 3, 5, 7, ...
- 由4的算法我们知道, 在素数序列已经被构造的情况下, 判断n是否为素数效率很高;
- 6.(在素数表中)二分查找
- Arrays.BinarySearch方法:
- 该方法用于在指定数组中查找给定的值,采用二分法实现,所以要求传入的数组已经是排序了的。
复制代码
除了以上,按照排除偶數的方式(n%2==0 && n!=2),質數(素數)的特徵還有各位是0或5並且不是5([0,5].include?(n.to_s[-1].to_i) && n!=5)則一定不是質數(素數)、所有位總和為3的倍數并且不是3(n.to_s.split("").collect{|i|n.to_s.to_i}.sum%3==0 && n!=3)則一定不是質數(素數)等雜七雜八的判斷(5和3的部分是在進入循環前就利用位上的數字做了判斷,不過好像用處不大?)
ruby中好像還有一個低效率而且有bug(字母進入直接true)的正則表達式用來找出質數
不討論那個低效率正則表達式
那在ruby中,用各種條件篩掉一部分理所當然的合數去尋找質數來提升效率而增加代碼量是值得的嗎?(我不太清楚加入各種條件以後能提升多少···)
|
评分
-
查看全部评分
|