Cave Painting CodeForces - 922C

http://codeforces.com/problemset/problem/922/C

n对1到k取余 问能否得到k个不同的数

n%1==0 => n%2==1 => n%3==2 => ... => n%k==k-1

n=2*a-1=3*b-1= ... =k*z-1

即判断n+1是否为1到k的lcm的倍数 lcm接近指数增长 超过n直接输出no

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

ll getlcm(ll a,ll b)
{
    ll res,t;
    res=a*b;
    while(b>0)
    {
        t=b,b=a%b,a=t;
    }
    return res/a;
}

int main()
{
    ll n,k,i,lcm;
    scanf("%lld%lld",&n,&k);
    lcm=1;
    for(i=2;i<=k&&lcm-1<=n;i++) lcm=getlcm(lcm,i);
    if((n+1)%lcm==0) printf("Yes\n");
    else printf("No\n");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/sunyutian1998/article/details/82925588