0
点赞
收藏
分享

微信扫一扫

HiveSQL基础Day04

言午栩 10小时前 阅读 2

备战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程序代码】

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

【输入样例】

3
3
6
8

【输出样例】

2
2
4

【解题思路】

        模板题

【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

【输入样例】

6

【输出样例】

12

【解题思路】

        模板题

【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,用一个空格分隔。

【输出格式】

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

【数据范围】

        

【输入样例】

2 5

【输出样例】

16

【解题思路】

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

【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

【输入样例】

4
2
4
5
231

【输出样例】

1 2 5
2 4 13
3 5 21
4 231 32549

【解题思路】

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

【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)
举报

相关推荐

JAVA基础day04

Day04

day04

day04 【Map】

打卡day04

day04作业

Javase day04

小程序day04

0 条评论