两个闹钟 数论
有两个闹钟。
第一个闹钟会在 b,b+a,b+2a,b+3a,… 时刻响铃。
第二个闹钟会在 d,d+c,d+2c,d+3c,… 时刻响铃。
请计算两个闹钟第一次同时响铃的具体时刻。
输入格式
第一行包含两个整数 a,b。
第二行包含两个整数 c,d。
输出格式
一个整数,表示第一次同时响铃的具体时刻。
如果永远都不可能同时响铃,则输出 −1。
数据范围
所有测试点满足 1≤a,b,c,d≤100。
输入样例1:
20 2
9 19
输出样例1:
82
输入样例2:
2 1
16 12
输出样例2:
-1
找到一个数i满足(i-b)%a==0 &&(i-d)%c ==0
还要满足(i>=b)&& (i>=d)
这个数中不存在多余的lcm(a,c),但并不是一定不包含lcm(a,c),因为要先减去b,d才是取余
#include <bits/stdc++.h>
using namespace std;
int lcm(int a,int b)
{
return a*b/__gcd(a,b);
}
int main()
{
int a,b,c,d,t;
cin>>a>>b>>c>>d;
for(int i=max(b,d);i<=max(b,d)+lcm(a,c);++i)
{
if((i-b)%a==0&&(i-d)%c==0){
cout<<i;return 0;
}
}
cout<<-1;
return 0;
}
暴力也能过
#include <iostream>
using namespace std;
int main()
{
int a,b,c,d,t,cnt=0;
cin>>a>>b>>c>>d;
for(int i=max(b,d);;++i,cnt++)
{
if((i-b)%a==0&&(i-d)%c==0){
cout<<i;
return 0;
}
if(cnt>1e7)break;
}
cout<<-1;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】