算法之数论基础

本文详细介绍了同余运算、最大公因数和最小公倍数的关系、唯一分解定理的实现、质数判定的方法,以及基于埃氏筛法筛选质数的过程,为IT技术爱好者提供了解决相关问题的基础知识。
摘要由CSDN通过智能技术生成

一、同余

1、如果a-b = km,那么a%mod = (b+km)%mod = b%mod 

2、对于相加或相乘,无论是在最后结果取余还是过程中每次取余,最终结果都一样

二、最大公因数(gcd)和最小1公倍数(lcm)

a,b的最大公因数和最小公倍数满足:gcd(a,b)*lcm(a,b) = ab.

所以,lcm(a,b) = a * b // gcd(a,b)

三、唯一分解定理

1、定义

 

比如18 = 2*3*3 = 2^1 * 3^2

2、代码

以下是基于python的得到一个数的质因子(质因数)的实现方法,输入24,得到[2,2,2,3]

# 基础代码
n = int(input())
ans = []
for i in range(2,n+1):
    if n%i == 0:
        while n%i == 0:
            n = n//i
            ans.append(i)
    if n == 1:  # 这个只存在于输入的n本身就是一个质数的情况
        break
print(ans)


# 改进代码,统计质因数个数
n = int(input())
ans = 0
a = n

for i in range(2,int(n**(0.5)+1)):  
  if a%i==0:
    ans += 1
    while a%i == 0:
      a = a//i


if a==1:  # 经过多次整除,如果得到的是1,1不是质数,那么说明答案就是ans
  print(ans) 

else:  # 经过多次整除,还有没有除完的,比如6//2=3,剩下的3也是质数,应该加1
  print(ans+1)  





3、为什么只需要枚举到sqrt(n)?

大于sqrt(n)的质因数最多只有一个,或者没有,不可能出现多个(比如34的质因数有2*17),如果有多个大于sqrt(n)的质因数,那么他们的乘积就会超出n

4、性质:

四、质数判定和埃氏筛法筛选质数

质数判定

任何一个自然数,总可以表示成以下六种形式之一:6n,6n+1,6n+2,6n+3,6n+4,6n+5(n=0,1,2...)我们可以发现,除了2和3,只有形如6n+1和6n+5的数有可能是质数。且形如6n+1(即i+2)和6n+5(也可以说成6n-1)的数如果不是质数,它们的因数也会含有形如6n+1或者6n-1的数

def is_prime(n):
    if n <= 1:
        return False
    if n == 2 or n == 3:
        return True
    if n % 2 == 0 or n % 3 == 0:
        return False
    for i in range(5, int(n ** 0.5) + 1, 6):
        if n % i == 0 or n % (i + 2) == 0:
            return False
    return True
埃氏筛法

1、埃氏筛法的基本思想 :从2开始,将每个质数的倍数都标记成合数,以达到筛选素数的目的。

2、给出要筛数值的范围n,找出以内的素数。先用2去筛,即把2留下,把2的倍数剔除掉;再用下一个质数,也就是3筛,把3留下,把3的倍数剔除掉;接下去用下一个质数5筛,把5留下,把5的倍数剔除掉;不断重复下去……

# 以下代码可以快速找出一亿以内所有质数
n = 10**8
s = [0]*(n+1)  # 0表示是质数,1表示不是质数
k=0
for i in range(2,n+1):
    if s[i]==0:  # 是质数
        k+=1  # 质数数量加一
        for j in range(i+i,n+1,i):  # 把该质数的所有倍数都去掉
            s[j]=1  # 打标记,1表示不是质数
 
#  s[i]=0,说明是质数
#  s[i]=1,说明不是质数

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值