整数的故事(3)——最小公倍数与哥德巴赫猜想

最小公倍数

  就像硬币的正反两面,最大公约数往往是和最小公倍数成对出现的。对于两个不等于零的整数a和b,如果a|k且b|k,那么k就是a和b的公倍数;在所有的k中,大于0的最小者就是a和b的最小公倍数(least common multiple),记作c = LCM(a,b),根据惯例,a≥b。

寻找最小公倍数

  寻找两个数的最小公倍数远比寻找它们的最大公约数简单:

 1 # 求a,b的最小公倍数
 2 def lcm(a, b):
 3     m, n = abs(a), abs(b)
 4     if m < n:
 5         m, n = n, m
 6
 7     result = 1
 8     for x in range(1, n + 1):
 9         cm = m * x
10         if cm % n == 0:
11             result = cm
12             break
13
14     return result

  根据定义,最小公倍数是正整数,计算负数的最小公倍数相当于计算其绝对值的最小公倍数。

寻找最小公倍数2.0版

  既然最大公约数和最小公倍数经常成对出现,是否能够通过其中一个直接计算另一个呢?当然可以,这需要用到下面的定理:

  定理说的是a和b的乘积等于它们最大公约数和最小公倍数的乘积,于是我们得到了寻找最小公倍数的另一个版本:

1 # 求a,b的最小公倍数
2 def lcm_2(a, b):
3     m, n = abs(a), abs(b)
4     if m < n:
5         m, n = n, m
6
7     return (a * b) / gcd(a, b)

  可以随便找一些数字去验证,验证的结果一定是正确的,但是定理是概念和其它定理推导而来的,而不是根据通过无数个计算总结出来的,让我们看看这个定理为什么成立。

  依然是利用素因子表达式:

  p1,p2……pt是a和b共同的素因子,它们的次数可以是0,比如:

  由于素因子分解是唯一的,所以a和b的约数的素因子将是:

  只有这样才能保存a’|a,b’|b。作为a和b的最大公约数,GCD(a,b)可以分解为:

  类似的,LCM(a,b)可以分解为:

  将二者相乘:

哥德巴赫猜想猜的是什么

  哥德巴赫猜想是最广为人知的数学难题,它的简称是1+1,这实在不怎么好。最普遍的误解版本是说哥德巴赫猜想就是证明1+1=2——一个苹果加另一个苹果为什等于两个苹果至今还没有被证明,这就一点不贴边了,哥德巴赫才不会那么无聊。另一个误解版本稍微高级一点,说一个素数加上另一个素数等于一个偶数,这个就不用麻烦老爷子了吧,更不用着欧拉,我就能证明。

  真正的哥德巴赫猜想是哥德巴赫在1742年提出的:任一大于2的偶数都可写成两个素数之和。但是哥德巴赫自己无法证明它,于是就写信请教赫赫有名的大数学家欧拉帮忙证明,但是一直到死,欧拉也无法证明。因现今数学界已经不使用“1也是素数”这个约定,所以哥德巴赫猜想的现代版本是:“所有大于4的偶数都可以分解成两个素数(质数)的和”,简称1+1,没有=2。

整数比自然数更多吗?

  这里有个好玩的问题,整数是无穷的,自然数也是无穷的,那么整数和自然数的个数哪个更多呢?

  第一感觉是整数更多,多了一倍,它比自然数多了负值部分。但真相是,二者的数量一样多!这就要了解数学中是怎样定义“一样多”的。在数学中,如果两个集合能够产生一一对应的关系,并且这个对应关系可以用一个函数表示,我们就可以说这两个集合的元素一样多。比如整数和自然数的对应可以是:

  这个对应关系函可以是:

  x是整数,f(x)是自然数,无论哪一个整数,都能在自然数中找到唯一的对应。f(x)没有尽头,所以不用关心会对应不上。

  自然数和实数是否也有这样的对应关系呢?没有。它们无法产生一一对应,因为每两个实数间都有无穷多个数,无法有效写出一个对应关系。

全体实数比±1之间的实数更多吗?

  整数和自然数一样多,那么全体实数的个数与[-1,1]区间内的实数个数哪个多呢?第一感觉又是实数多,但实际上二者一样多!

  这个匪夷所思的问题可以用一个数轴表示,说明二者一一对应:数轴上的每一个点都代表一个实数,把-1 到1之间的线段的向上弯折,得到一个与0点相切,弧长是2的圆弧:

  现在,把数轴上的任意点与弧连线,都可以在弧上找到唯一点:

  弧上的点和数轴上的点都有无数个,最终的密集连线将会变成一个平面,无限远端的连线也将近似地平行于数轴。由此可见,二者的数量相等,更准确的说是“势”相等。

  



   作者:我是8位的

  出处:http://www.cnblogs.com/bigmonkey

  本文以学习、研究和分享为主,如需转载,请联系本人,标明作者和出处,非商业用途!

  扫描二维码关注公众号“我是8位的”

原文地址:https://www.cnblogs.com/bigmonkey/p/10269301.html

时间: 2024-11-13 09:59:30

整数的故事(3)——最小公倍数与哥德巴赫猜想的相关文章

URAL 1356. Something Easier(哥德巴赫猜想)

题目链接 题意 : 给你一个数n,让你找出几个素数,使其相加为n,输出这些素数. 思路 : 哥德巴赫猜想 : 任何一个大于 6的偶数都可以表示成两个素数之和. 任何一个大于9的奇数都可以表示成三个素数之和. 而在该题中,偶数中2本身就是个素数,奇数中小于9的都是素数,所以只要写一个判断素数的函数即可,这样不在范围内的数就可以直接判断输出了. 任何一个整数N(N>=2)最多由三个素数相加构成.要分情况考虑: 1. 如果N为偶数,1)如果N==2,直接输出: 2)如果N>2,那么N一定可以写成两个

uva 10168 哥德巴赫猜想

https://vjudge.net/problem/UVA-10168 给出一个整数n,问是否能将它化为四个素数相加的形式,如果可以的话就输出这四个数.显然n<8时是不可能的.对于大于等于8得数,如果是个奇数,可以将其-2-3形成一个偶数,同理将偶数-2-2形成另一个偶数.哥德巴赫猜想是对于任意大于等于6的偶数都能分解为两个奇素数的和,正好将这个偶数再次分为两个素数加上前面的两个凑成四个. ps.难道数据很弱么1000w的范围竟然30ms就跑完了欸 1 #include<iostream&g

CF735D Taxes 哥德巴赫猜想\判定素数 \进一步猜想

http://codeforces.com/problemset/problem/735/D 题意是..一个数n的贡献是它的最大的因子,这个因子不能等于它本身 然后呢..现在我们可以将n拆成任意个数的整数相加,每个数最小只能拆成2, 单独计算每个数的贡献,然后加起来使他的贡献最小..那么我们肯定是拆成质数最赚 因为质数对答案的贡献是1... 所以现在这个问题变成了把一个数拆成最少个数的质数 那么我们不知道最少能拆成多少个质数啊..我一开始想的是你每次找最接近这个数的质数..一直找下去应该是可以的

编程验证哥德巴赫猜想

1.什么是哥德巴赫猜想 在1742年给欧拉的信中哥德巴赫提出了以下猜想:任一大于2的整数都可写成三个质数之和.因现今数学界已经不使用"1也是素数"这个约定,原初猜想的现代陈述为:任一大于5的整数都可写成三个质数之和.欧拉在回信中也提出另一等价版本,即任一大于2的偶数都可写成两个质数之和.今日常见的猜想陈述为欧拉的版本.把命题"任一充分大的偶数都可以表示成为一个素因子个数不超过a个的数与另一个素因子不超过b个的数之和"记作"a+b".1966年陈景

【算法】验证哥德巴赫猜想

问题来源 Timus Online Judge 网站上有这么一道题目:1356. Something Easier.这道题目的输入是一组  2 到 109 之间整数,对于每个输入的整数,要求用最少个数的素数的和来表示.这道题目的时间限制是 1 秒. 问题解答 我们知道著名的哥德巴赫猜想是: 任何一个充分大的偶数都可以表示为两个素数之和 于是我们有以下的 C 语言程序(1356.c): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

洛谷 P1579 哥德巴赫猜想(升级版)【筛素数/技巧性枚举/易错】

[链接]:https://www.luogu.org/problemnew/show/P1579 题目背景 1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和.质数是指除了1和本身之外没有其他约数的数,如2和11都是质数,而6不是质数,因为6除了约数1和6之外还有约数2和3.需要特别说明的是1不是质数. 这就是哥德巴赫猜想.欧拉在回信中说,他相信这个猜想是正确的,但他不能证明. 从此,这道数学难题引起了几乎所有数学家的注意.哥德

哥德巴赫猜想(升级版)

题目背景 1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和.质数是指除了1和本身之外没有其他约数的数,如2和11都是质数,而6不是质数,因为6除了约数1和6之外还有约数2和3.需要特别说明的是1不是质数. 这就是哥德巴赫猜想.欧拉在回信中说,他相信这个猜想是正确的,但他不能证明. 从此,这道数学难题引起了几乎所有数学家的注意.哥德巴赫猜想由此成为数学皇冠上一颗可望不可及的"明珠". 题目描述 现在请你编一个程序验证哥

循环-04. 验证“哥德巴赫猜想”

循环-04. 验证“哥德巴赫猜想”(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 徐镜春(浙江大学) 数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和.比如:24=5+19,其中5和19都是素数.本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和. 输入格式: 输入在一行中给出一个(2, 2 000 000 000]范围内的偶数N. 输出格式: 在一行中按照格式

P1304 哥德巴赫猜想

题目描述 输入N(N<=10000),验证4~N所有偶数是否符合哥德巴赫猜想. (N为偶数). 如果一个数,例如10,则输出第一个加数相比其他解法最小的方案.如10=3+7=5+5,则10=5+5是错误答案. 输入输出格式 输入格式: 第一行N 输出格式: 4=2+2 6=3+3 …… N=x+y 输入输出样例 输入样例#1: 10 输出样例#1: 4=2+2 6=3+3 8=3+5 10=3+7 先筛一边素数,然后暴力枚举就好 1 #include<iostream> 2 #inclu