进制数位和的平均数

[编程题] 进制均值

时间限制:1秒

空间限制:32768K

尽管是一个CS专业的学生,小B的数学基础很好并对数值计算有着特别的兴趣,喜欢用计算机程序来解决数学问题,现在,她正在玩一个数值变换的游戏。她发现计算机中经常用不同的进制表示一个数,如十进制数123表达为16进制时只包含两位数7、11(B),用八进制表示为三位数1、7、3,按不同进制表达时,各个位数的和也不同,如上述例子中十六进制和八进制中各位数的和分别是18和11,。 小B感兴趣的是,一个数A如果按2到A-1进制表达时,各个位数之和的均值是多少?她希望你能帮她解决这个问题? 所有的计算均基于十进制进行,结果也用十进制表示为不可约简的分数形式。 
输入描述:
输入中有多组测试数据,每组测试数据为一个整数A(1 ≤ A ≤ 5000).


输出描述:
对每组测试数据,在单独的行中以X/Y的形式输出结果。

输入例子1:
5
3

输出例子1:
7/3
2/1
#encoding:utf-8
_author_ = "Wang Wenchao"
import sys
def hcf(x, y):
    """该函数返回两个数的最大公约数"""
    # 获取最小值
    if x > y:
        smaller = y
    else:
        smaller = x

    for i in range(1, smaller + 1):
        if ((x % i == 0) and (y % i == 0)):
            hcf = i
    return hcf
def jinZhiSum(J,N):
    sum=0
    while N>0:
        sum+=N%J
        N=N//J
    return sum
def jinZhiAve(N):
    sum=0
    for j in range(2,N):
        sum+=jinZhiSum(j,N)
    h=hcf(sum,N-2)
    print str(sum/h)+'/'+str((N-2)/h)

for number in sys.stdin:
    number=int(number.strip())
    if number!=0:
        jinZhiAve(number)
原文地址:https://www.cnblogs.com/BetterThanEver_Victor/p/7487205.html