数论 - 挑战编程
欢迎访问我的新博客:http://www.milkcu.com/blog/
原文地址:http://www.milkcu.com/blog/archives/number-theory-in-programming-challenges.html
原创:数论 - 挑战编程
作者:MilkCu
摘要:数论是一门研究整数性质的理论,是有趣和优美的数学分支。数论只是在编程中也被广泛应用,比如,素数的问题、最大公约数、最小公倍数、模运算等问题。
素数
前10个素数分别为:2, 3, 5, 7, 11, 13, 17, 19, 23, 29.
算术基本定理:每个整数表示成素数乘积的方式只有一种。
大于1且不是素数的整数称为合数(composite)。
素数是不仅无穷多的,而且还不算特别少。
不超过x的素数大约有 x/lnx 个。换句话说,大约每 lnx 个整数大约就有一个是素数。
整除性
求解最大公约数(greatest common divisor,也称gcd)最有趣的是欧几里得(Euclid)算法。
在PC110703欧几里德问题(http://blog.csdn.net/milkcu/article/details/23590217)中有详细的应用和说明。
最小公倍数 = 两数之积 / 最大公约数
即lcm(x, y) = xy / gcd(x, y)
模运算
加法
(x + y) mod n = ((x mod n) + (y mod n)) mod n
注意负数模n,可以通过加上n的整数倍来转换为正数模n。
乘法
xy mod n = (x mod n)(y mod n) mod n
乘方
x^y mod n = (x mod n)^y mod n
在PC110702 Carmichael数(http://blog.csdn.net/milkcu/article/details/23553323)中有个简单的应用。
习题
Light, more light - PC110701 - MilkCu的专栏 - 开灯与关灯
http://blog.csdn.net/milkcu/article/details/23543557
Carmichael Numbers - PC110702 - MilkCu的专栏 - Carmichael数
http://blog.csdn.net/milkcu/article/details/23553323
Euclid Problem - PC110703 - MilkCu的专栏 - 博客频道 - 欧几里德问题
http://blog.csdn.net/milkcu/article/details/23590217
Factovisors - PC110704 - MilkCu的专栏 - 博客频道 - 阶乘与整除
http://blog.csdn.net/milkcu/article/details/23592449
Summation of Four Primes - PC110705 - MilkCu的专栏 - 四素数之和
http://blog.csdn.net/milkcu/article/details/23599369
Smith Numbers - PC110706 - MilkCu的专栏 - Smith数
http://blog.csdn.net/milkcu/article/details/23607205
(全文完)