本文主要是介绍[codeplus 11月月赛]T1 jogging,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
传送门
大水题。。。
就是算三个数的lcm
然后我为了防爆,就用了质因数分解。。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#define ll long long
using namespace std;
inline int read(){int x=0;char ch=' ';int f=1;while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();if(ch=='-')f=-1,ch=getchar();while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar();return x*f;
}
const int N=1e5+5;
int a,b,c,cnt;
int vis[N],prime[N],e[N];
inline void init(int n){for(int i=2;i<=n;i++){if(!vis[i])prime[++cnt]=i;for(int j=1;j<=cnt&&i*prime[j]<=n;j++){vis[i*prime[j]]=1;if(i%prime[j]==0)break;}}
}
inline void work(int x){for(int j=1;j<=cnt;j++){int num=0;int tmp=x;while(tmp%prime[j]==0){num++;tmp/=prime[j];}e[j]=max(e[j],num);}
}
inline ll ksm(ll a,ll b){ll ans=1;while(b){if(b&1)ans*=a;a*=a;b>>=1;}return ans;
}
int main(){a=read();b=read();c=read();int n=max(max(a,b),c);init(n);work(a);work(b);work(c);ll ans=1;for(int j=1;j<=cnt;j++){ans*=ksm(prime[j],e[j]);}printf("%lld",ans);return 0;
}
这篇关于[codeplus 11月月赛]T1 jogging的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!