题目描述:
给你一个环,环上有从n到m的连续递增的数字,问有几对相邻的数字是互质的。 环的形状具体如下:
输入描述:
多组测试样例,每组测试样例包含两个正整形n和m。表示环上的数字。(0<n<=m<=100000000)。
当m和n都为0时结束。
输出描述:
对于每组测试样例,输出相邻互质的数字的对数。
样例输入:
2 4
0 0
样例输出:
2
对于本题,关键的是知道什么是互质,互质就是两个数的最大公约数是1,那么这个时候就需要使用辗转相除法了。
不过这个的前提是M和N的差应该大于一,不然会造成重复计算的情况。
#include<stdio.h>
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m)&&(m||n))
{
int num1=m;
int num2=n;
if(m==n)
{
printf("0\n");
}
else
{
int c;
if(m-n>1)
while(n)
{
c=m%n;
m=n;
n=c;
}
if(m==1)
{
printf("%d\n",num1-num2+1);
}
else
{
printf("%d\n",num1-num2);
}
}
}
return 0;
}