Lecture 4数学知识
约数
1.试除法求约数
一个数的约数 以
为轴对称
2.约数个数 约数之和
一个数可以表示为其质因子相乘的形式
3.求最大公约数
欧几里得算法(辗转相除)有证明a,b大小位置无所谓
def gcd(a, b):
return gcd(b,a%b) if b else a
更相减损法(辗转相减)九章算术里的
def gcd(a, b):
while a != b:
if a > b:
a -= b
else:
b -= a
return a
位运算辗转相除法
def gcd(a, b):
while b != 0:
a = a % b
b ^= a
a ^= b
b ^= a
return a
异或运算交换两变量值,不需要引入第三个变量,证明:
4.欧拉函数
定义
一种证明
注意第六行计算累计值要先除再乘
def totient(x):
res = x
i = 2
while i <= x // i:
if x % i == 0:
res = res // i * (i - 1)
while x % i == 0:
x = x // i
i += 1
if x>1:
res = res // x * (x - 1)
print(res)