题目描述
小b打算拉着小h做一道简单的数学题,但是小h觉得太简单了,于是找到了你,相信对你来说也是小菜一碟。
具体题目为:现在有一个10进制整数122,如果转成16进制的话应该是7B,那么位数和则为18。现在题目升级为给定一个10进制整数n,需要对n转化为2~n-1进制下对应的数,并求出它们的位数和a。然后将a作为分子,n转化为不同格式数的个数作为分母b。输出最简分子式a/b。
输入
第一行输入一个整数t,表示t组数据(t<=100)
接下来t行,每行输入一个10进制整数n(2<n<=1000)
输出
输出n行,每行输出题目描述的最简分子式
样例输入
2
10
5
样例输出
3/1
7/3
代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int f(int m,int n){
int t=0;
while(m>0){
t+=m%n;
m/=n;
}
return t;//位数和
}
int main(){
int t;
cin>>t;
while(t--){
int n;
scanf("%d",&n);
int a=0,b=n-2;
for(int i=2;i<n;i++){
a+=f(n,i);
}
//分数化简
int aa=a>b?a:b;
int bb=a<b?a:b;//将a,b的大小分开
while(aa%bb!=0){
int t=aa;
aa=bb;
bb=t%bb;
}
cout<<a/bb<<'/'<<b/bb<<endl;
}
return 0;
}