NYOJ993--How many integers can you find

本文介绍了一种利用辗转相除法实现的最大公约数算法,并通过C语言代码进行了详细展示。该算法适用于需要计算两个整数最大公约数的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://acm.nyist.net/JudgeOnline/problem.php?pid=993

#include<stdio.h>
#include<string.h>
/*
辗转相除法原理:
两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。
当余数为0时,较小数与余数0的最大公约数为其本身
另:余数绝对小于较小数
*/
int gcd(int m1,int m2)
{
 int max,min;
 max=m1>m2?m1:m2;
 min=m1<m2?m1:m2;
 int r=max%min;
 while(r)
 {
  max=min;
  min=r;
  r=max%min;
 }
 return min;
}
int main()
{
 long long n;
 int m1,m2;
 while(~scanf("%lld%d%d",&n,&m1,&m2))
 {
  n--;
  printf("%lld\n",n/m1+n/m2-n/(m1*m2/gcd(m1,m2)));
 }
}
/*
64位整型的定义方式:
long long/__int64
输出到标准输出方式有:
printf("%lld",a);
printf("%I64d",a);
cout<<a;
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值