用最少的计算量找到素数的算法

2024-01-03

假设您要编写一个函数/方法来查找素数,最有效的方法是什么?我认为这将是一个类似这样的测试:

下面的代码是半c++

bool primeTest (int x) { //X is the number we're testing
    int testUpTo = (int)((sqrt(x))+1);
    for (int i=3; i<testUpTo; i+=2){
        if ((x%i)==0) {
            return false;
        }
    }
    return true;
}

有人有更好的方法来解决这个问题并且需要更少的计算吗?

编辑:稍微更改了代码两次。我写这篇文章时并没有考虑任何特定的语言,尽管由于 bool 这个词,我认为它是 C++ 而不是 java。


我会用米勒拉宾测试 http://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test,对于小于 341,550,071,728,321 的数字可以很容易地确定(2^31 比这个小得多)。

伪代码:有许多不同的情况。

  1. x小于9:返回(x & 1) != 0 || x == 2
  2. x小于约 200(可调整):使用试除法(您使用的)
  3. x小于 1373653:使用底数为 2 和 3 的 Miller Rabin。
  4. x小于 4759123141(即其他值):使用底数为 2、7 和 61 的 Miller Rabin。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用最少的计算量找到素数的算法 的相关文章

  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • java中日期转换dd-MMM-yyyy到dd-MM-yyyy

    在Java中将23 Mar 2011转换为23 03 2011的最简单方法是什么 感谢大家 这似乎解决了这个问题 try Calendar cal Calendar getInstance cal setTime new SimpleDat
  • JFrame Glasspane 也优于 JDialog,但不应该

    我有一个带有 Glasspane 的 JFrame 未装饰 该框架打开一个 JDialog 也未装饰 也有一个 glassPane 并隐藏自身 setVisible false Glasspanes 通过 setGlassPane 设置 对
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • “___ 中的方法 ___() 是在无法访问的类或接口中定义的”编译错误

    我发现了一个奇怪的编译限制 我无法解释 并且我不明白这个限制的原因 示例1 考虑这些类 In package e1 public class C1 enum E1 A B C public E1 x In package e2 import
  • Java LRU 缓存使用 LinkedList

    堆栈溢出的新手 所以请不要介意我以菜鸟的方式问这个问题 我正在尝试使用链表实现 LRU 缓存 我在这里看到了使用 linkedHashMap 和其他数据结构的其他实现 但对于这种情况 我正在尝试使用链表创建最佳优化版本 正如我在技术期间被问
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 上下文敏感与歧义

    我对上下文敏感性和歧义如何相互影响感到困惑 我认为正确的是 歧义 歧义语法会导致使用左推导或右推导构建多个解析树 所有可能的语法都是二义性的语言是二义性语言 例如 C 是一种不明确的语言 因为 x y 总是可以表示两个不同的事物 如下所述
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • 等待线程完成

    private void button1 Click object sender EventArgs e for int i 0 i lt 15 i Thread nova new Thread Method nova Start list
  • Java 中更高级的泛型

    假设我有以下课程 public class FixExpr Expr
  • 如何对 Web Api 操作进行后调用?

    我创建了一个 Web API 操作 如下所示 HttpPost public void Load string siteName string providerName UserDetails userDetails implementat
  • Lucene/Hibernate 搜索锁定异常

    我使用 Hibernate Search 在 Web 应用程序上索引和全文搜索项目 没有问题 来自我的 pom xml
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • 如何将 Roslyn 语义模型返回的类型符号名称与 Mono.Cecil 返回的类型符号名称相匹配?

    我有以下代码 var paramDeclType m semanticModel GetTypeInfo paramDecl Type Type Where paramDeclType ToString returns System Col
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个
  • 在没有EOF的情况下停止读取java中的输入

    In 问题 如何停止读取输入 我的程序继续运行 要求更多输入 public static void main String args throws Exception BufferedReader br new BufferedReader
  • 在客户端系统中安装后桌面应用程序无法打开

    我目前正在使用 Visual Studio 2017 和 4 6 1 net 框架 我为桌面应用程序创建了安装文件 安装程序在我的系统中完美安装并运行 问题是安装程序在其他计算机上成功安装 但应用程序无法打开 edit 在客户端系统中下载了

随机推荐

  • 无法在 Jenkins Pipeline 中显示 JUnit 测试结果

    我有一段 Jenkins 管道代码 我试图在我的角度代码上运行 JUnit 如果单元测试失败 Jenkins 必须停止管道 它正在工作 只是我看不到 最新测试结果 和 测试结果趋势 我正在使用 Jenkins 2 19 1 Jenkins
  • 导入 CSV 时选择指定行

    我有一个很大的 CSV 文件 我只想导入选择某些行 如果有 首先 我创建将导入的行的索引 然后我希望将这些行的名称传递给 sqldf 并返回指定行的完整记录 create the random rows ids that will be s
  • 安卓Mipmap?

    每当我尝试使用 AndroidStudio 生成新的 Android 项目时 它都会隐藏文件夹 drawables 我以前从未发生过这种情况 我环顾四周 发现它正在生成这个名为 mipmap 的文件夹 我搜索了一下 发现这与绘图类似 但这是
  • 尝试使用 woocommerce_new_order_item 挂钩保存订单项元数据

    Add meta to order item param int item id param array values return void function cart add meta data booking item id valu
  • 使用 Wikimedia API 获取位置

    如何使用 Mediawiki API 获取 Wikipedia 文章的城市 国家位置 假设我想确定圣家族大教堂位于哪个国家 哪个城市 我应该使用什么属性 尝试以下查询 And see 扩展 地理数据 https www mediawiki
  • React Router v4 中的嵌套路由

    我正在尝试设置一些嵌套路由来添加通用布局 检查一下代码
  • 在应用程序购买测试帐户无法在 IOS 中运行?

    我们正在使用沙盒测试帐户测试应用程序购买 在测试时它显示验证 在验证付款信息后 当我尝试在应用程序购买中测试时 它会将我重定向到应用程序商店 应用程序商店显示超时 我做错了什么吗 我还创建了另外三个沙箱测试帐户 用于在应用程序购买中进行测试
  • Parallel.ForEach 未生成所有线程

    我在使用 Parallel ForEach 时遇到一些问题 我需要模拟几个硬件组件 等待传入连接并回复它 我当前的代码如下 Task Factory StartNew gt components component gt var liste
  • 第 N 次和第 (N+1) 次出现之间的正则表达式字符串

    我试图找到两个特殊字符之间第 n 次出现的子字符串 例如 一 二 三 四 五 比如说 我正在寻找 第 n 次和第 n 1 次 第二次和第三次出现 之间的字符串字符 结果是 三 我想使用正则表达式来做到这一点 有人可以指导我吗 我当前的尝试如
  • 从 SQL Server 2008 调用非托管 C/C++ DLL 函数

    我有一个庞大的 C C 函数库 需要从 SQL Server 2008 调用 我编写了一个 C 适配器类 它从 Win32 DLL 加载这些函数DllImport并将它们暴露给 Net 代码 这在大多数 Net 应用程序中都可以正常工作 现
  • 如何将参数名称作为参数传递?

    我有这个代码 hobbies2 form cleaned data pop hobbies2 PersonneHobby objects filter personne obj delete for pk str in hobbies2 t
  • UpdateSourceTrigger=显式

    我正在创建一个包含多个文本框的 WPF 窗口 当用户按下 确定 按钮时 我希望所有文本框都被评估为非空白 我知道我必须将 TextBox 与 Explicit 的 UpdateSourceTrigger 一起使用 但我是否需要为每个文本框调
  • 在资源有限的环境中禁用背景视频

    对于基于网络的媒体播放器项目 我正在尝试使用简单的一些微妙的背景视频
  • 使用 asp.net WebService 和 Android 将图像上传到 Azure Blob 存储?

    我正在尝试通过以下方式将选定的图像从我的 Android 设备上传到 Azure Blob 我制作的 asp net WebService 但我在 android 中收到橙色错误 W System err 454 SoapFault 故障代
  • Windows 客户端应用程序的登录对话框

    我可以调用 Win32 函数来显示 Windows 登录对话框吗 例如 Internet Explorer 和 Visual Studio 的团队资源管理器在访问网站时都会显示凭据对话框 我如何显示该对话框 我有一个 NET Windows
  • CLion 和 Crypto++ 库

    不久前 我开始在 Visual Studio 2015 中编写应用程序 在设置所有库依赖项时没有出现任何问题 现在 我决定搬到 CLion 但是我的应用程序依赖于cryptopp库 我需要将其链接到我的 CLion 项目中 目前 我面临着大
  • 如何仅获取表达式系列输出的最后一个值?

    我不需要这个表达式的整个数组 只需要它的最近 当前 值 如何修改其代码 UpperBollinger ta sma close 20 2 ta stdev close 20 当然 我可以用它来获得相同的较低频段 你不能这样做 Once a
  • std::bind 如何按值获取可变参数,即使具有通用引用?

    函数签名为std bind 如下 https en cppreference com w cpp utility functional bind template lt class F class Args gt unspecified b
  • 是否可以在 Google Maps API 中检索特定区域内的所有地址列表?

    假设我想检索罗马所有地址的列表 如何在 Google Maps API 或任何其他网络服务中以编程方式实现此目的 我不需要地址的实际位置 只需要地址名称的列表 您无法使用 Google Maps API 来做到这一点 你可以做反向地理编码
  • 用最少的计算量找到素数的算法

    假设您要编写一个函数 方法来查找素数 最有效的方法是什么 我认为这将是一个类似这样的测试 下面的代码是半c bool primeTest int x X is the number we re testing int testUpTo in