传送门
大水题。。。
就是算三个数的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;
}