质数生成函数、质数判断备份

以下都是测试int 32bit范围内的质数。
例如:1-200000014范围内有11078937个质数。

大数要用专门的类,支持任意范围大数。

质数定理给出了一个近似估计小于等于 n 的质数个数的公式:
π(n) ≈ n / ln(n)
其中 π(n) 表示小于等于 n 的质数个数,ln(n) 表示 n 的自然对数。这个公式在 n 很大时比较准确,但 n 较小时误差较大。
例如:小于等于 0xFFFFFFFF 的质数有 n/ln(n)==193635251 个。
0xFFFFFFFF 以内有2亿左右个质数,数量非常多,密度也很大,
这也是质数分解可以作为密码的原因。

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <math.h>//质数判断
bool is_prime_optimized(int n) {if (n <= 1) {return false;}int i2 = (int)sqrt(n);for (int i = 2; i <= i2; i++) {if (n % i == 0) {return false;}}return true;
}
//有限大小的质数缓存
int eratosthenes_sieve(int limit, int *count, int ** prime_array) {if (NULL== count || NULL==prime_array) {return -1;}*count = 0;*prime_array = NULL;if (limit < 2) {return 0;}bool* is_prime = (bool*)malloc(sizeof(bool) * (limit + 1));if (NULL == is_prime) {goto ERROR;}for (int i = 0; i <= limit; i++) {is_prime[i] = true;}is_prime[0] = is_prime[1] = false;for (int p = 2; p * p <= limit; p++) {if (is_prime[p]) {for (int i = p * p; i <= limit; i += p) {//至少从p * p开始is_prime[i] = false;}}}int count_temp = 0;for (int p = 2; p <= limit; p++) {if (is_prime[p]) {++count_temp;}}*count = count_temp;*prime_array = (int*)malloc(sizeof(int) * count_temp);if (NULL==*prime_array) {goto ERROR;}count_temp = 0;for (int p = 2; p <= limit; p++) {if (is_prime[p]) {(*prime_array)[count_temp] = p;++count_temp;}}free(is_prime);return 0;ERROR:if (is_prime) {free(is_prime);is_prime = NULL;}if (*prime_array) {free(*prime_array);*prime_array = NULL;}*count = 0;return -1;
}

以下为简单测试代码

int main(int argc, char* argv[]){int i1 = 200000014;unsigned int i2 = 0xFFFFFFFF;int count = 0;int* prime_array = NULL;printf("小于等于 %d 的质数有 n/ln(n)==%.0f 个。\n", i1, (double)i1 / log(i1));//10463629printf("小于等于 0xFFFFFFFF 的质数有 n/ln(n)==%.0f 个。\n", (double)i2 / log(i2));//193635251eratosthenes_sieve(i1,&count,&prime_array);printf("小于等于 %d 的质数有 %d 个。\n", i1, count);//11078937//for (int i = 0; i < count; i++) {//    printf("%d,", prime_array[i]);//}int a= 64577;printf("%d is prime %d\n",a , is_prime_optimized(a));for (int i = 0; i < count; i++) {while (0 == a % prime_array[i]) {printf("%d ", prime_array[i]);a = a / prime_array[i];}if (1 == a)break;}if (prime_array) {free(prime_array);}return 0;
}

win11下vs2022的CMakeLists.txt内容如下

cmake_minimum_required(VERSION 3.10)
project(ctest VERSION 0.1 LANGUAGES C)
set(CMAKE_C_STANDARD 99)add_executable(ctest main.c)
if(CMAKE_BUILD_TYPE STREQUAL "Debug")target_compile_options(ctest PRIVATE -O0 -g -DDEBUG)
else()target_compile_options(ctest PRIVATE -O2 -g)
endif()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/65222.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

scala基础学习_运算符

文章目录 scala运算符算术运算符关系运算符逻辑运算符位运算符其他运算符赋值运算符 scala运算符 在 Scala 中&#xff0c;运算符通常被定义为方法。这意味着你可以将运算符视为对象上的方法调用。以下是一些常用的运算符及其对应的操作&#xff1a; 算术运算符 &#xff1a…

【C++11】类型分类、引用折叠、完美转发

目录 一、类型分类 二、引用折叠 三、完美转发 一、类型分类 C11以后&#xff0c;进一步对类型进行了划分&#xff0c;右值被划分纯右值(pure value&#xff0c;简称prvalue)和将亡值 (expiring value&#xff0c;简称xvalue)。 纯右值是指那些字面值常量或求值结果相当于…

IntelliJ Idea常用快捷键详解

文章目录 IntelliJ Idea常用快捷键详解一、引言二、文本编辑与导航1、文本编辑2、代码折叠与展开 三、运行和调试四、代码编辑1、代码补全 五、重构与优化1、重构 六、使用示例代码注释示例代码补全示例 七、总结 IntelliJ Idea常用快捷键详解 一、引言 在Java开发中&#xff…

kafka的备份策略:从备份到恢复

文章目录 一、全量备份二、增量备份三、全量恢复四、增量恢复 前言&#xff1a;Kafka的备份的单元是partition&#xff0c;也就是每个partition都都会有leader partiton和follow partiton。其中leader partition是用来进行和producer进行写交互&#xff0c;follow从leader副本进…

【达梦数据库】小版本升级之bin文件替换

目录 背景信息确认备份老数据库安装新数据库bin文件替换启动数据库信息确认参考链接附件 背景 在测试环境中&#xff0c;需要升级DM8的小版本&#xff0c;推荐使用如下方式。生产环境禁用。 信息确认 disql下&#xff1a;版本确认 select svr_version,build_version,ID_COD…

怎么模仿磁盘 IO 慢的情况?并用于MySQL进行测试

今天给大家分享一篇在测试环境或者是自己想检验自己MySQL性能的文章 实验环境&#xff1a; Rocky Linux 8 镜像&#xff1a;Rocky-8.6-x86_64-dvd.iso 1. 创建一个大文件作为虚拟磁盘 [rootlocalhost ~] dd if/dev/zero of/tmp/slowdisk.img bs1M count100 记录了1000 的读入…

1.微服务灰度发布(方案设计)

前言 微服务架构中的灰度发布&#xff08;也称为金丝雀发布或渐进式发布&#xff09;是一种在不影响现有用户的情况下&#xff0c;逐步将新版本的服务部署到生产环境的策略。通过灰度发布&#xff0c;你可以先将新版本的服务暴露给一小部分用户或特定的流量&#xff0c;观察其…

【开源免费】基于SpringBoot+Vue.JS安康旅游网站(JAVA毕业设计)

本文项目编号 T 098 &#xff0c;文末自助获取源码 \color{red}{T098&#xff0c;文末自助获取源码} T098&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

YOLOv9-0.1部分代码阅读笔记-assigner.py

assigner.py utils\tal\assigner.py 目录 assigner.py 1.所需的库和模块 2.def select_candidates_in_gts(xy_centers, gt_bboxes, eps1e-9): 3.def select_highest_overlaps(mask_pos, overlaps, n_max_boxes): 4.class TaskAlignedAssigner(nn.Module): 1.所需的库…

安装k8s涉及命令(方便放到txt离线使用)

查看操作系统信息 uname -a # 查看所有操作系统信息 uname -s # 查看内核名称 uname -r # 查看内核版本号 uname -m # 查看机器硬件名称 cat /etc/os-release # 查看所有操作系统信息 配置hosts cat >> /etc/hosts << EOF 172.171.16.147 crawler-k8s-mast…

基于SpringBoot的4S店汽车销售管理系统的设计与实现

一、课题背景 为汽车销售公司设计了一个汽车管理系统 技术&#xff1a;前台采用网页技术&#xff0c;后端采用SpringBoottMybatistvue 项目 描述&#xff1a;随着人们生活水平的不断提高&#xff0c;人们对汽车的消费和需求也越来越旺盛。多汽车销售公司仍然采用人工记账的传…

【ES6复习笔记】模板字符串(3)

介绍 模板字符串是 ES6 引入的一种新的字符串声明方式&#xff0c;它使用反引号&#xff08;&#xff09;来定义字符串&#xff0c;而不是单引号&#xff08;&#xff09;或双引号&#xff08;"&#xff09;。模板字符串可以包含变量、表达式和换行符&#xff0c;这使得它…

电子应用设计方案72:智能扫地机器人系统设计

智能扫地机器人系统设计 一、引言 智能扫地机器人作为现代智能家居的重要组成部分&#xff0c;旨在为用户提供便捷、高效的地面清洁服务。本设计方案将详细阐述智能扫地机器人的系统架构、功能模块及实现方式。 二、系统概述 1. 系统目标 - 自主规划清扫路径&#xff0c;覆盖…

RabbitMQ中的普通Confirm模式:深入解析与最佳实践

在分布式系统中&#xff0c;消息队列&#xff08;Message Queue&#xff09;是实现异步通信和解耦的重要组件。RabbitMQ作为一种广泛使用的消息中间件&#xff0c;提供了多种消息确认机制&#xff08;Confirm Mode&#xff09;&#xff0c;以确保消息的可靠传递。本文将深入探讨…

C++ 面向对象编程:关系运算符重载、函数调用运算符重载

对 、<、> 三个运算符分别进行重载&#xff0c;可见以下代码&#xff1a; #include<iostream> using namespace std;class location { public:location(int x1, int y1) :x(x1), y(y1){};bool operator(const location& l1) const{return x l1.x && …

路由策略

控制层流量 --- 路由协议传递路由信息时产生的流量 数据层流量 --- 设备访问目标地址时产生的流量 所谓的路由策略----在控制层面转发流量的过程中&#xff0c;截取流量&#xff0c;之后修改流量再转发或不转发的技术&#xff0c;最终达到影响路由器路由表的生成&#xff0c…

【CSS in Depth 2 精译_095】16.3:深入理解 CSS 动画(animation)的性能

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第五部分 添加动效 ✔️【第 16 章 变换】 ✔️ 16.1 旋转、平移、缩放与倾斜 16.1.1 变换原点的更改16.1.2 多重变换的设置16.1.3 单个变换属性的设置 16.2 变换在动效中的应用 16.2.1 放大图标&am…

基础组件:

基础组件&#xff1a; RichText 富文本组件&#xff0c;解析并显示HTML格式文本。 适用场景&#xff1a; RichText组件适用于加载与显示一段HTML字符串&#xff0c;且不需要对显示效果进行较多自定义的应用场景。RichText组件仅支持有限的通用属性和事件。具体见属性与事件…

数据之林的守护者:二叉搜索树的诗意旅程

文章目录 前言一. 二叉搜索树的概念1.1 二叉搜索树的定义1.1.1 为什么使用二叉搜索树&#xff1f; 二. 二叉搜索树的性能分析2.1 最佳与最差情况2.1.1 最佳情况2.1.2 最差情况 2.2 平衡树的优势 三.二叉搜索树的基本操作实现3.1.1 详细示例3.1.2 循环实现插入操作3.1.2.1 逻辑解…

【Apache Paimon】-- 11 -- Flink 消费 kakfa 写 S3 File

目录 1、项目构建 2、项目新增和修改 2.1 pom.xml 新增依赖 2.2 本地测试或者 flink on k8s 时,新增 S3FileSystemFactory.java 第一步:创建包=org.apache.flink.fs.s3hadoop 第二步:新增 java 类 S3FileSystemFactory 特别注意 (1)本地测试时需要新增以下内容 (…