蓝桥杯 第六十二天 数论

太菜了

等差数列

def gcd(x,y):
    if y>x:
        x,y=y,x
    if y==0:
        return x
    else:
        return gcd(y,x%y)
n=int(input())
a=list(map(int,input().split()))
a.sort()
b=[]
for i in range(1,n):
    b.append(a[i]-a[i-1])
b.sort()
if a[0]==a[-1]:
    print(n)
else:
    ans=gcd(b[0],b[1])
    for i in range(1,n-1):
        ans=gcd(ans,b[i])
    print((a[-1]-a[0])//ans+1)

X的因子链

N=pow(2,20)+1
prime=[]
st=[False for i in range(N)]
pre=[-1 for i in range(N)]
def getprime():
    for i in range(2,N):
        if st[i]==False:
            st[i]=True
            prime.append(i)
            pre[i]=i
        for j in prime:
            if i*j>=N:
                break
            st[i*j]=True
            pre[i*j]=j
            if i%j==0:
                break
getprime()
def mul(x):
    if x==1:
        return 1
    else:
        return x*mul(x-1)
try:
    while True:
        n=int(input())
        length=0
        a=[0 for i in range(n+1)]
        while n!=1:
            length+=1
            a[pre[n]]+=1
            n//=pre[n]
        ans=mul(length)
        for i in a:
            if i!=0:
                ans//=mul(i)
        print(length,ans)
except EOFError:
    pass

五指山 (扩展欧几里得算法)

扩展欧几里得算法
学不会,直接背

def exgcd(a,b):
    if b==0:
        return 1,0,a
    else:
        x,y,q=exgcd(b,a%b)
        x,y=y,(x-(a//b)*y)
        return x,y,q
t=int(input())
for _ in range(t):
    n,d,x,y=map(int,input().split())
    a,b,gcd=exgcd(n,d)
    if (y-x)%gcd:
        print("Impossible")
    else:
        b*=(y-x)//gcd
        n//=gcd
        print(b%n)

最大比例

def gcd(x,y):
    if y==0:
        return x
    else:
        return gcd(y,x%y)
def gcd_sub(x,y):
    if x<y:
        x,y=y,x
    if y==1:
        return x
    else:
        return gcd_sub(y,x//y)
n=int(input())
a=list(map(int,input().split()))
a=list(set(a))
a.sort()
x=[]
y=[]
for i in range(1,len(a)):
    d=gcd(a[0],a[i])
    x.append(a[i]//d)
    y.append(a[0]//d)
p=x[0]
q=y[0]
for i in range(1,len(x)):
    p=gcd_sub(p,x[i])
    q=gcd_sub(q,y[i])
print("{}/{}".format(p,q))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值