知识点 - python

知识点 - python

解决问题类型:

自带高精度、快速幂、gcd、Karatsuba快速乘

注意python的除法,\ 是浮点数的除,会自动将int转化为float然后丢失精度。

复杂度:

Karatsuba快速乘: O ( 3 n 1.585 ) O(3n^{1.585}) O(3n1.585)

例题

E. Resistors in Parallel,2018-2019 ACM-ICPC, Asia Jiaozuo Regional Contest

n个电阻,编号为i的电阻阻值为 i ,但如果i可以被大于4的平方数整除,这个电阻的阻值就是 ∞ \infty

你现在可以选择一个 x &lt; = n x&lt;=n x<=n ,将所有编号为 x x x 的因数的电阻并联起来。问能得到的等价电阻最小为多少?输出它的分数形式。

解:

根据样例手模出来选的 x x x 就是前几个质数的乘积。

比如 n = 1000 n=1000 n=1000时:选 x = 2 ∗ 3 ∗ 5 ∗ 7 x=2*3*5*7 x=2357 电阻为:
2   ∗   3   ∗   5   ∗   7 1   +   2   +   3   +   5   + 7 +   2   ∗   3    +   2   ∗   5 +   2   ∗   7   +   3   ∗   5   + 3   ∗   7   +   5   ∗   7 + 2   ∗   3   ∗   5   +   3   ∗   5   ∗   7   +   2   ∗   5   ∗   7   +   2   ∗   3   ∗   7    +   2   ∗   3   ∗   5   ∗   7 \frac{2\ *\ 3\ *\ 5\ *\ 7}{1\ +\ 2\ +\ 3\ +\ 5\ +7+\ 2\ *\ 3\ \ +\ 2\ *\ 5+\ 2\ *\ 7\ +\ 3\ *\ 5\ +3\ *\ 7\ +\ 5\ *\ 7+2\ *\ 3\ *\ 5\ +\ 3\ *\ 5\ *\ 7\ +\ 2\ *\ 5\ *\ 7\ +\ 2\ *\ 3\ *\ 7\ \ +\ 2\ *\ 3\ *\ 5\ *\ 7} 1 + 2 + 3 + 5 +7+ 2  3  + 2  5+ 2  7 + 3  5 +3  7 + 5  7+2  3  5 + 3  5  7 + 2  5  7 + 2  3  7  + 2  3  5  72  3  5  7
于是我们计算 x x x的 等价电阻,为
∏ p ∣ n p ∏ p ∣ n ( p + 1 ) \frac{\prod_{p|n}p}{\prod_{p|n}(p+1)} pn(p+1)pnp

代码

import math
#10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
A=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257]
s=1
cnt2=0
B=[]
B.append(0)
for x in A:
    s *= x
    cnt2 = cnt2 + 1
    B.append(int(s))

T = int(input())

for kase in range(T):
    now = int(0)
    n=int(input())
    for i in range(55):
        if(int(B[i+1])>n):
            now=i
            break
    up=int(1)
    down=int(1)

    for i in range(now):
        up*=int(A[i]+1)
        down*=int (A[i])
    d=math.gcd(up,down)
    up=int(up // d)
    down=int(down // d)

    txt=str(down)+'/'+str(up)
    print(txt)

 #一行读入
 A=list(map(int,input().split()))
 #sort
 A=sorted(A)
 #   
#多维数组
a=[] 
for i in range(100): 
a.append([]) 
for j in range(100): 
a[i].append(0) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Best KeyBoard

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值