热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java生成大素数_代码优化生成素数

如果数字为2,则返回true;如果数字可被2整除,则返回false.开始迭代3,而不是2.使用两步.迭代到数字的平方根,而不

如果数字为2,则返回true;如果数字可被2整除,则返回false .

开始迭代3,而不是2.使用两步 .

迭代到数字的平方根,而不是数字减1 .

def prime?(number)

return true if number == 2

return false if number <&#61; 1 or number % 2 &#61;&#61; 0

(3..Math.sqrt(number)).step(2) do |n|

return false if number % n &#61;&#61; 0

end

true

end

&#64;Technation解释说&#xff0c;这会快得多&#xff0c;但仍然不会很快 .

以下是使用Sieve of Eratosthenes built into Ruby的方法 . 您需要将所有素数预先计算到最大值&#xff0c;这将非常快&#xff0c;然后选择每个范围内的素数 .

require &#39;prime&#39;

ranges &#61; Array.new(gets.strip.to_i) do

min, max &#61; gets.strip.split.map(&:to_i)

Range.new(min, max)

end

primes &#61; Prime.each(ranges.map(&:max).max, Prime::EratosthenesGenerator.new)

ranges.each do |range|

primes.each do |prime|

next if prime

break if prime > range.max

puts prime

end

primes.rewind

puts "\n"

end

以下是各种解决方案在50000 200000范围内的性能&#xff1a;

你的原始素数&#xff1f;功能&#xff1a;1m49.639s

我修改了素数&#xff1f;功能&#xff1a;0m0.687s

Prime :: EratosthenesGenerator&#xff1a;0m0.221s

处理的范围越多&#xff0c;Prime :: EratosthenesGenerator方法应该越快 .



推荐阅读
author-avatar
黄于諭春琪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有