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

 http://codeforces.com/gym/102028/problem/E

题意:给n个集合si,si为i的因子集合,这些因子必须不能被平方数整除;s12={1,2,3,6},在这些集合中取一个使得因子倒数和的倒数最小,最简分数表示;(n<=10^100)

思路:大数,取n以内的素因子达到最优,贡献是i/(i+1);

import math

maxn = 2000

def gcd(x,y):
    if y: return gcd(y,x%y)
    return x

def P():
    isp=[True]*(maxn+10)
    pri=[]
    for i in range(2,maxn):
        if isp[i]:
            pri.append(i)
            for j in range(i*i,maxn,i):
                isp[j]=False
    return pri

t=int(input())
prime = P()
while t:
    n=int(input())
    down=1
    up=1
    sum=1
    for i in prime:
        sum*=i
        if sum>n:break
        up*=i
        down*=i+1
    g=gcd(up,down)
    up//=g
    down//=g
    print(str(up)+'/'+str(down))
    t-=1



猜你喜欢

转载自blog.csdn.net/weixin_39132605/article/details/87520507