[codeplus 11月月赛]T1 jogging

来源:互联网 发布:周琦和姚明cba数据 编辑:程序博客网 时间:2024/05/18 03:06

传送门
大水题。。。
就是算三个数的lcm
然后我为了防爆,就用了质因数分解。。
代码:

#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<cstdlib>#define ll long longusing 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;}
原创粉丝点击