题意:
给定n,k,要求判断是否对于i=[1,k],满足n%i互不相同。
数据范围:n,k<=1e18
解法:
显然n%1 =0,
而n%2不能=0,因此n%2必须等于1,
同理:
n%3=2,n%4=3。
发现需要n%i=i-1,那么(n+1)%i=0,
因此(n+1)必须是1的倍数,2的倍数…i的倍数,即(n+1)必须是k的阶乘的倍数。
当k过大的时候肯定无解(20的就已经阶乘大于1e18),
因此直接暴力判断n%i=i-1是否成立即可,i的遍历次数会很小。
code:
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int n,k;cin>>n>>k;
for(int i=1;i<=k;i++){
if(n%i!=i-1){
puts("No");
return 0;
}
}
puts("Yes");
return 0;
}