【题目】
求真分数递增序列。统计分母在区间[a,b]的最简真分数(分子小于分母,且分子分母无公因数)共有多少个?并求这些最简真分数升序序列中的第k项。(正整数a,b,k从键盘输入)。
【分析】
分子分母最大公约数为1的就是真分数,由此把分母区间的真分数都找出来,然后升序排序,按下标输出。
【程序】
#include<stdio.h>
#include<algorithm>
using namespace std;
struct aa
{
int x,y;
double c;
}A[100000];
bool cmp(aa a,aa b)
{
return a.c<b.c;
}
int main()
{
int a,b,K,n;
int i,j,k,f;
while(scanf("%d%d%d",&a,&b,&K)!=EOF)
{
n=0;
for(i=a;i<=b;i++)
{
for(j=1;j<=i-1;j++)
{
f=0;
for(k=2;k<=j;k++)
{
if(i%k==0&&j%k==0)
{f=1;break;}
}
if(f==0)
{A[n].x=i;A[n].y=j;A[n].c=1.0*j/i;n++;}
}
}
sort(A,A+n,cmp);
printf("共%d个\n第%d个是:%d/%d\n",n,K,A[K-1].y,A[K-1].x);
}
return 0;
}
【运行】