2024蓝桥杯每日一题(欧拉函数)

备战2024年蓝桥杯 -- 每日一题

Python大学A组

试题一:最大公约数

试题二:欧拉函数

试题三:筛法求欧拉函数

试题四:互质数的个数

试题五:可见的点


试题一:最大公约数

【题目描述】

【输入格式】

第一行包含整数 T,表示共有 T 组测试数据。

每组数据占一行,包含两个整数 a,m。

【输出格式】

每组数据输出一行结果,一个整数,表示满足条件的非负整数 x 的个数。

【数据范围】

前三个测试点满足,1≤T≤10

所有测试点满足,1≤T≤50,1≤a<m≤1010

【输入样例】

复制代码
3
4 9
5 10
42 9999999967

【输出样例】

复制代码
6
1
9999999966

【解题思路】

就是求m/gcd(m,d)的欧拉函数。

【Python程序代码】

python 复制代码
from math import *
T = int(input())
for _ in range(T):
    a,m = map(int,input().split())
    d = gcd(a,m)
    a//=d; m//=d
    res = m
    i = 2
    while i*i<=m:
        if m%i==0:
            res *=(i-1)/i
            while m%i==0:m//=i
        i+=1
    if m>1:res*=(m-1)/m
    print(int(res))


试题二:欧拉函数

【题目描述】

【输入格式】

第一行包含整数 n。

接下来 n 行,每行包含一个正整数 ai。

【输出格式】

输出共 n 行,每行输出一个正整数 ai 的欧拉函数。

【数据范围】

1≤n≤100,

1≤ai≤2×109

【输入样例】

python 复制代码
3
3
6
8

【输出样例】

python 复制代码
2
2
4

【解题思路】

模板题

【Python程序代码】

python 复制代码
T = int(input())
for _ in range(T):
    m = int(input())
    res = m
    i = 2
    while i*i<=m:
        if m%i==0:
            res *=(i-1)/i
            while m%i==0:m//=i
        i+=1
    if m>1:res*=(m-1)/m
    print(int(res))

试题三:筛法求欧拉函数

【题目描述】

给定一个正整数 n,求 1∼n中每个数的欧拉函数之和。

【输入格式】

共一行,包含一个整数 n。

【输出格式】

共一行,包含一个整数,表示 1∼n中每个数的欧拉函数之和。

【数据范围】

1≤n≤106

【输入样例】

python 复制代码
6

【输出样例】

python 复制代码
12

【解题思路】

模板题

【Python程序代码】

python 复制代码
n = int(input())
primes,st = [],[0]*(n+10)
res = [0]*(n+10)
def work(n):
    res[1]=1
    for i in range(2,n+1):
        if st[i]==0:
            primes.append(i)
            res[i]=i-1
        j = 0
        while primes[j]*i<=n:
            k = primes[j]*i
            st[k]=1
            if i%primes[j]==0:
                res[i*primes[j]] = res[i]*primes[j]
                j += 1
                break
            res[i*primes[j]] = res[i]*(primes[j]-1)
            j += 1
    ans = 0
    for i in range(1,n+1):
        ans += res[i]
    return ans
print(work(n))

试题四:互质数的个数

【题目描述】

给定 a,b,求 1≤x<ab 中有多少个 x 与 a^b 互质。

由于答案可能很大,你只需要输出答案对 998244353 取模的结果。

【输入格式】

输入一行包含两个整数分别表示 a,b,用一个空格分隔。

【输出格式】

输出一行包含一个整数表示答案。

【数据范围】

【输入样例】

python 复制代码
2 5

【输出样例】

python 复制代码
16

【解题思路】

就是求a^b的欧拉函数值

【Python程序代码】

python 复制代码
a,b = map(int,input().split())
p = 998244353
def work(t,k):
    return t*pow(k,p-2,p)%p
res = pow(a,b,p)
i,t=2,a
while i*i <= t:
    if t%i==0:res=res*work(i-1,i)%p
    while t%i==0:t//=i
    i += 1
if t!=1:res = res*work(t-1,t)%p
if a==1:res=0
if a==p and b==1:res = p-1
print(res)

试题五:可见的点

【题目描述】

在一个平面直角坐标系的第一象限内,如果一个点 (x,y)与原点 (0,0) 的连线中没有通过其他任何点,则称该点在原点处是可见的。

例如,点 (4,2)就是不可见的,因为它与原点的连线会通过点 (2,1)。

部分可见点与原点的连线如下图所示:

编写一个程序,计算给定整数 N 的情况下,满足 0≤x,y≤N0≤ 的可见点 (x,y)的数量(可见点不包括原点)。

【输入格式】

第一行包含整数 C,表示共有 C 组测试数据。

每组测试数据占一行,包含一个整数 N。

【输出格式】

每组测试数据的输出占据一行。

应包括:测试数据的编号(从 1 开始),该组测试数据对应的 N 以及可见点的数量。

同行数据之间用空格隔开。

【数据范围】

1≤N,C≤1000

【输入样例】

python 复制代码
4
2
4
5
231

【输出样例】

python 复制代码
1 2 5
2 4 13
3 5 21
4 231 32549

【解题思路】

筛法求欧拉函数,答案就是res[i]*2+1,仔细思考一下。

【Python程序代码】

python 复制代码
c = int(input())
primes,st = [],[0]*(1010)
res = [0]*(1010)
def work(n=1000):
    res[1]=1
    for i in range(2,n+1):
        if not st[i]:
            primes.append(i)
            res[i]=i-1
        j = 0
        while primes[j]*i<=n:
            st[primes[j]*i]=1
            if i%primes[j]==0:
                res[primes[j]*i]=res[i]*primes[j]
                j+=1
                break
            res[primes[j]*i]=res[i]*(primes[j]-1)
            j +=1
work(1000)
for i in range(1,1001):res[i]+=res[i-1]
for i in range(c):
    x = int(input())
    print(i+1,x,res[x]*2+1)
相关推荐
lihihi2 小时前
P1209 [USACO1.3] 修理牛棚 Barn Repair
算法
程序员Sunday2 小时前
Claude Code 生态爆发:5个必知的新工具
前端·人工智能·后端
2401_884563243 小时前
Python Lambda(匿名函数):简洁之道
jvm·数据库·python
weixin_387534223 小时前
Ownership - Rust Hardcore Head to Toe
开发语言·后端·算法·rust
智算菩萨3 小时前
【How Far Are We From AGI】6 AGI的进化论——从胚胎到终极的三级跃迁与发展路线图
论文阅读·人工智能·深度学习·ai·agi
庞轩px3 小时前
MinorGC的完整流程与复制算法深度解析
java·jvm·算法·性能优化
夏同学Xavi3 小时前
skls-mgr:统一管理 Agent Skills 的 CLI 工具
人工智能·程序员·命令行
Queenie_Charlie3 小时前
Manacher算法
c++·算法·manacher
闻缺陷则喜何志丹3 小时前
【树的直径 离散化】 P7807 魔力滋生|普及+
c++·算法·洛谷·离散化·树的直径