对于给定的整数n,求所有分母不大于n的最简真分数(分母不小于分子,且分子和分母的最大公因子为1)。
输入格式:
第一行为一个整数t,表示测试样例的数量。
每一个测试用例一行:一个整数,表示给定的整数n(0<n<161)。
输出格式:
每个测试用例输出若干行,每一行表示分母不大于n的最简真分数(格式为:分子/分母),并按分数的值从小到大排序。
输入样例:
2
4
5
输出样例:
0/1
1/4
1/3
1/2
2/3
3/4
1/5
1/4
1/3
2/5
1/2
3/5
2/3
3/4
4/5
输入格式:
第一行为一个整数t,表示测试样例的数量。
每一个测试用例一行:一个整数,表示给定的整数n(0<n<161)。
输出格式:
每个测试用例输出若干行,每一行表示分母不大于n的最简真分数(格式为:分子/分母),并按分数的值从小到大排序。
输入样例:
2
4
5
输出样例:
0/1
1/4
1/3
1/2
2/3
3/4
1/1
1/5
1/4
1/3
2/5
1/2
3/5
2/3
3/4
4/5
1/1
#include <iostream>
#include <algorithm>
using namespace std;
struct node{
int fenzi; //分子
int fenmu; //分母
double num; //分子/分母
}a[1000];
double cmp(node x,node y){
return x.num<y.num;
}
bool factor(int n1,int n2){ //n1<n2
int i;
for(i=2;i<=n1;i++){
if(n1%i==0 && n2%i==0)
return false;
}
return true;
}
int main(){
int t,n;
int i,j;
int count;
cin>>t;
while(t--){
cin>>n;
count=0;
for(i=1;i<=n;i++){
for(j=1;j<i;j++){
if(factor(j,i)){
a[count].fenzi=j;
a[count].fenmu=i;
a[count].num=a[count].fenzi*1.0/a[count].fenmu*1.0;
count++;
}
}
}
sort(a,a+count,cmp);
cout<<"0/1"<<endl;
for(i=0;i<count;i++)
cout<<a[i].fenzi<<"/"<<a[i].fenmu<<endl;
cout<<"1/1"<<endl;
}
return 0;
}