给定一个大于2的十进制正整数A。
该数字在 2∼A−1 进制表示下的各位数字之和均可以求出。
例如,数字 123 在 16 进制表示下,共有 2 位:第 1 位是 7,第二位是 11,各位数字之和为 18。
现在,请你将 A 在 2∼A−1 进制表示下的各位数字之和全部相加,并将得到的结果除以 A−2,最终结果以最简分数形式输出。
输入格式
一个十进制正整数A
输出格式
输出格式为 X/Y,其中 X 表示输出答案的分子,Y 表示输出答案的分母。
数据范围
前三个测试点满足 3≤A≤10。
所有测试点满足 3≤A≤1000。
输入样例1
5
输出样例1
7/3
输入样例2
3
输出样例2
2/1
分析:
利用短除法、辗转相除法,注意分数的化简。
解答:
#include <stdio.h>
int sum(int A,int t)
{
int r=0;
while(A!=0)
{
r+=A%t;
A/=t;
}
return r;
}//短除法,求取n进制各位数之和
int gcd(int x,int y)
{
if(x%y==0)return y;
else return gcd(y,x%y);
}//辗转相除法,求出最大公约数
int main()
{
int A,fenzi=0,fenmu,i,k;
scanf("%d",&A);
for(i=2;i<=A-1;i++)fenzi+=sum(A,i);
k=gcd(fenzi,A-2);
fenzi/=k;
fenmu=(A-2)/k;
printf("%d/%d",fenzi,fenmu);
return 0;
}