简单数论——蓝桥杯备赛【python】

一、模运算

试题链接:余数

问题描述

小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做a道题目,周六和周日每天做b道题目。请你帮小明计算,按照计划他将在第几天实现做题数大于等于n题?

输入描述

输入一行包含三个整数 a,b 和 n。

输出描述

输出一个整数代表天数。

对于 50%的评测用例,1≤a,b,n≤10^6;对于 100%的评测用例,1≤a,b,n≤10^18

输入示例

10 20 99

输出示例

8

问题分析

求余数的简单题,利用求余,把计算复杂度降为 0(1)


代码示例

a,b,n=map(int,input().split())
yz=a*5+b*2
x=n//yz
y=n%yz
if y<=a*5:
  if y%a>0:
    print(x*7+y//a+1)
  else:
    print(x*7+y//a)
else:
  y-=a*5
  if y%b>0:
    print(x*7+y//b+6)
  else:
    print(x*7+y//b+5)

二、快速幂

试题链接:快速幂

问题描述

输入b,p,k的值,求b mod k的值。其中2≤b,p,k≤ 10^9
输入描述
三个整数 b, p, k。
输出描述
输出 (b^p)mod k=s,s为运算结果。

输入示例

2 10 9

输出示例

7

代码示例

def fast_pow(a,n,mod):
    ans = 1
    a %= mod
    while n>0:
        if n & 1 == 1:
            ans=(ans*a)%mod
        a =(a * a)% mod
        n >>= 1
    return ans
b,p,k=map(int,input().split())
print(fast_pow(b,p,k))
b,p,k=map(int,input().split())
print(pow(b,p,k))

 


三、最大公约数

代码示例

def gcd(a,b):
    if b==0:
        return a
    return gcd(b,a%b)
a,b=map(int,input().split())
x=gcd(a,b)
print(x)

四、最小公倍数

ps:注意在考虑三个数的最小公倍数时,先对其中两个求lcm,再用这个lcm与另一个值求lcm

代码示例

def gcd(a,b):
    if b==0:
        return a
    return gcd(b,a%b)
def lcm(a,b):
    return a//gcd(a,b)*b
a,b=map(int,input().split())
x=lcm(a,b)
print(x)

五、素数

代码示例

def sushu(a):
    for i in range(2,int(a**0.5)+1):
        if a%i==0:
            return "no"
    return "yes"
m=int(input())
if m<=0:
    print("no")
else:
    print(sushu(m))
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值