一些很少用到又比较神奇的数学概念

本文探讨了质数在密码学中的加密原理,如RSA算法,以及其在汽车齿轮设计、害虫防治和生物周期中的实际运用。同时揭示了对数的神奇性质,如在计算机科学中的对数运算和在数据压缩中的应用。程序员还可学习到C语言中的对数函数实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

质数

定义

质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。
已经开始眼皮发沉了。
在这里插入图片描述

神奇之处

百度百科中有这样一段话介绍了神奇的素数应用:

质数被利用在密码学上,所谓的公钥就是将想要传递的信息在编码时加入质数,编码之后传送给收信人,任何人收到此信息后,若没有此收信人所拥有的密钥,则解密的过程中(实为寻找素数的过程),将会因为找质数的过程(分解质因数)过久,使即使取得信息也会无意义。
在汽车变速箱齿轮的设计上,相邻的两个大小齿轮齿数设计成质数,以增加两齿轮内两个相同的齿相遇啮合次数的最小公倍数,可增强耐用度减少故障。
在害虫的生物生长周期与杀虫剂使用之间的关系上,杀虫剂的质数次数的使用也得到了证明。实验表明,质数次数地使用杀虫剂是最合理的:都是使用在害虫繁殖的高潮期,而且害虫很难产生抗药性。
以质数形式无规律变化的导弹和鱼雷可以使敌人不易拦截。
多数生物的生命周期也是质数(单位为年),这样可以最大程度地减少碰见天敌的机会。

在这里插入图片描述

在现实生活中,数的分解是许多网络加密的基础,我们要把两个已知数相乘很容易,但是要把一个大数分解却很难,利用整数的这一非对称特性,密码学家巧妙地设计了加密和解密的数学原理,比如RSA非对称加密算法,就是基于大数分解。换句话说,一旦出现一种算法能很快地分解一个大数,那么RSA加密方法将失效,但是目前为止还没有出现这样的高效算法。

参考文章《17年的蝉》
劳资在地下17年,等的就是一个机会。
在这里插入图片描述

和程序员有关的内容

这里有一篇介绍质数计算的文章《素数及其使用》
这里介绍的思想,就是通过在定义的基础上,如何减少运算量,去掉重复无用的运算,限制运算的范围来达到高效的目的。
另外还有一种思想:既然计算很慢,那我就慢慢算,算出来,我记录成一个表,以后就不用再算了。
算不过,就记住。打不过,就加入。
在这里插入图片描述

遗留问题

哥德巴赫猜想:任何一个大于2的偶数,都可以写成两个素数之和,简称“1+1=2”。以前总听说证明1+1=2,今天才明白了这个1不是那个1。那个2,也不是那个2。

在这里插入图片描述

对数

定义

如果a的x次方等于N(a>0,且a不等于1),那么数x叫做以a为底N的对数(logarithm),记作x=logaN。其中,a叫做对数的底数,N叫做真数。
在这里插入图片描述

特别地,
以10为底的对数叫做常用对数(common logarithm),并记为lg。
以无理数e(e=2.71828…)为底的对数称为自然对数(natural logarithm),并记为ln。
零没有对数。
在实数范围内,负数无对数。在复数范围内,负数是有对数的。
在这里插入图片描述

神奇的对数

可以学习一下这篇文章《如何理解对数?》
通过这个文章,可以学习到,原来对数如此神奇,也知道了原来有种尺子,可以做乘法,开方。也知道了天文学,为何如此钟爱对数,然后理解一下那句话

给我时间,空间和对数,我可以创造出一个宇宙

在这里插入图片描述

还有一篇对数变换的文章 《对数》
介绍了在搜索应用上,对数转化的作用。
在这里插入图片描述

和程序员有关的内容

c语言中定义的函数和数学上定义的函数有所区别。
c语言中只定义的两个函数:
y=log (double x):代表数学式中的 ln,
y=log10 (double x):表示数学式中的 lg,
至于数学上要求loga(b)(a不为e和10),可用换底公式表示为log(b)/log(a)。

程序要包含头文件math.h。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>


int main(int argc, char **argv)
{
	double x;
	double i=100;

	x=log(i);
	printf(" 'log(i)' ln(100) == %lf\n",x);
	
	x=log10(i);
	printf(" 'log10(i)' lg(100) == %lf\n",x);

	x=log(100)/log(2);
	printf(" 'log(100)/log(2)' log2(100) == %lf\n",x);

}

结果输出

[root@localhost test]# ./log 
 'log(i)' ln(100) == 4.605170
 'log10(i)' lg(100) == 2.000000
 'log(100)/log(2)' log2(100) == 6.643856

排列与组合

定义

排列的定义:从n个不同元素中,任取m(m≤n,m与n均为自然数,下同)个不同的元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列;从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号 或表示。
计算公式:
在这里插入图片描述
组合的定义:从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合;从n个不同元素中取出m(m≤n)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数。用符号 C(n,m) 表示。
计算公式:
在这里插入图片描述

快速理解

可以学习这篇文章《5分钟彻底了解排列组合》
其实两种操作,就像分小球一样,例如10个不同颜色的小球,挑出五个分给五个人,如果没人在乎颜色,那就是组合;如果在乎颜色,那就是排列。

息息相关

红球一共6组,每组从1-33中抽取一个,六个互相不重复。
蓝球是从1-16中抽取一个数字,这整个组成的双色球。
那么一等奖:
1/C(33,6)*16=1 /[ (33 * 32 * 31 * 30 * 29 * 28/6*5*4*3*2*1) * 16 ] = 1/17721088

一等奖(6+1)中奖概率为:红球33选6乘以蓝球16选1=1/17721088=0.0000056%;
二等奖(6+0)中奖概率为:红球33选6乘以蓝球16选1=15/17721088=0.0000846%;
三等奖(5+1)中奖概率为:红球33选5乘以蓝球16选1=162/17721088=0.000914%;
四等奖(5+0、4+1)中奖概率为:红球33选5乘以蓝球16选0=7695/17721088=0.0434%;
五等奖(4+0、3+1)中奖概率为:红球33选4乘以蓝球16选0=137475/17721088=0.7758%;

小赌怡情,大赌伤身。

那么如何破解这个尴尬的局面呢。我们都知道,一注彩票是2元,蓝球一中至少5元。多年前我思考过一个方法:守蓝球x。
第1期:1注;红球随意,蓝球x。如果不中
第2期:1注;红球随意,蓝球x。如果不中
第3期:2倍;红球随意,蓝球x。如果不中(这里2倍的做法,就是要将3期全部的成本8元回收回来,所以要至少买2倍)
第4期:3倍,红球随意,蓝球x。如果不中(这里3倍的做法,就是要将之前的成本14元回收回来,所以要至少买3倍)
第5期:5倍,红球随意,蓝球x。如果不中(这里5倍的做法,就是要将之前的成本24元回收回来,所以要至少买3倍)
……
以此类推,那么哪天中了。你就可以收回前面所有成本了。
在这里插入图片描述
祭出神器吧!!!!那么作为程序员,一段代码带过

int main(int argc, char **argv)
{
	int i=0;
	//总支出
	int cast=0;
	
	for(i=1;i<max;i++)
	{
		//最少购买倍数
		int least=1;

		while(1)
		{
			if(least*5<(2+cast))
			{
				cast=cast+2;
				least++;
			}
			else
			{
				cast+=2;
				break;
			}
		}
		printf("第%d期:购买:%d倍。\n",i,least);
	}

}

计算结果

第1期:购买:1倍。
第2期:购买:1倍。
第3期:购买:2倍。
第4期:购买:3倍。
第5期:购买:5倍。
第6期:购买:8倍。
第7期:购买:14倍。
第8期:购买:23倍。
第9期:购买:38倍。
第10期:购买:64倍。
第11期:购买:106倍。
第12期:购买:177倍。
第13期:购买:295倍。
第14期:购买:492倍。
第15期:购买:820倍。
第16期:购买:1366倍。
第17期:购买:2277倍。
第18期:购买:3795倍。
第19期:购买:6325倍。
第20期:购买:10542倍。
第21期:购买:17570倍。
第22期:购买:29283倍。
第23期:购买:48805倍。
第24期:购买:81342倍。
第25期:购买:135570倍。
第26期:购买:225950倍。
第27期:购买:376583倍。
第28期:购买:627638倍。
第29期:购买:1046064倍。
第30期:购买:1743440倍。
第31期:购买:2905733倍。
第32期:购买:4842888倍。

在这里插入图片描述
有兴趣的同学可以试一下稳赚不赔。中了记得请我吃小布丁。

总结

新年第一篇,写了一丁点数学的东西,都是皮毛上的皮毛,当时都没有好好学习,现在回想起来,难免不因为自己的虚度年华而悔恨。
在这里插入图片描述
理科学习,数学其实是最有价值,也是最难的部分,得数学者得天下。希望大家都能好好学习数学。
在这里插入图片描述
对了,还有每天睡够十个小时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖哥王老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值