计算两个随机数互为素数的概率

2023-11-05 17:20

本文主要是介绍计算两个随机数互为素数的概率,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

研究这个问题开始,先研究随机数的做法
随机数这里用伪随机数就够了,这里需要用到srand()rand()两个函数,这两个函数头文件为stdlib.h
这两个函数的原型为:

一般操作为:先用srand()函数产生随机数种子。计算机产生伪随机数,是通过一系列的函数计算得来的。就是srand()中所返回的参考值,通过计算得到的数字,每次取出其中一个,如果每次使用的都是同一个种子,那么得到的随机数也就是相同的,因此要得到不同的随机数,就需要使用不同的种子数,又不能每次用完一个数字又去手动更换一个种子数,但是时间是会变化的,因此我们使用srand(time(NULL))来使得每一次的种子数都不同。值得注意的是:srand()函数不要放在循环语句中使用,否则会导致每次的时间过短(不足1s),而产生一系列相同的随机数(这就有点尴尬了)。例如:在这里插入图片描述
解释完随机数之后,就需要来了解下互为素数的算法。可以用欧几里得算法(辗转相除法),只需要计算两个数字的最小公因数为1,就可以得出两者互为素数。

程序如下:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>int Gcd(int M, int N);int main(void)
{int a, b, c;srand(time(NULL));while (1){int i, j, Tot = 0, Rel = 0;for (i = 0; i < 10000; i++)//这里用了10000组数字做统计{a = rand();b = rand();//printf("%d\t%d\n\n", a, b);Tot++;if (Gcd(a, b) == 1)Rel++;				}printf("两个随机数互为素数的概率为%f\n",(double) Rel / Tot);Sleep(500);//结果出现的不会太快}return 0;
}int Gcd(int M, int N)//欧几里得算法
{while (N > 0){int Rem = M % N;M = N;N = Rem;}return M;
}

最后的结果趋近于6/π²(官方数据啦),大概就是0.61左右。

这篇关于计算两个随机数互为素数的概率的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/351337

相关文章

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Java计算经纬度距离的示例代码

《Java计算经纬度距离的示例代码》在Java中计算两个经纬度之间的距离,可以使用多种方法(代码示例均返回米为单位),文中整理了常用的5种方法,感兴趣的小伙伴可以了解一下... 目录1. Haversine公式(中等精度,推荐通用场景)2. 球面余弦定理(简单但精度较低)3. Vincenty公式(高精度,

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

C/C++随机数生成的五种方法

《C/C++随机数生成的五种方法》C++作为一种古老的编程语言,其随机数生成的方法已经经历了多次的变革,早期的C++版本使用的是rand()函数和RAND_MAX常量,这种方法虽然简单,但并不总是提供... 目录C/C++ 随机数生成方法1. 使用 rand() 和 srand()2. 使用 <random

java两个List的交集,并集方式

《java两个List的交集,并集方式》文章主要介绍了Java中两个List的交集和并集的处理方法,推荐使用Apache的CollectionUtils工具类,因为它简单且不会改变原有集合,同时,文章... 目录Java两个List的交集,并集方法一方法二方法三总结java两个List的交集,并集方法一

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.