CF1708B Difference of GCDs
原题:Problem - 1708B - Codeforces
从区间上找n个数,使得每一位的gcd(i,Ai)不同,刚开始想的麻烦了,以为每个数也得不一样,给的样例也很唬人,其实只是每个i所对应的最大公约数不一样就可以了。
新学的好办法:r/i*i,当r能被i整除时一切都好说就是r,当r不能被整除也即向下取整,eg:15/4=3,3*4=12很明显能达到找出Ai整除i的目的,但是我们还得判断特殊情况即样例所给:
10 30 35
1,2,3,4,5,6,7,8到9的时候35/9=3 3*9=27 很明显小了不符合题意,所以要判断其与左边界的大小。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <string>
using namespace std;
int ans[100005];
signed main()
{
int T;
cin >> T;
while(T--){
int n, l, r,op=0;
scanf("%d%d%d", &n, &l, &r);
for(int i=1;i<=n;i++)
{
int x=r/i*i;
if(x<l)
{
op=1;
printf("NO\n");
break;
}else ans[i]=x;
}
if(!op)
{
printf("YES\n");
for(int i=1;i<=n;i++) printf("%d ",ans[i]);
printf("\n");
}
}
return 0;
}