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;
}

 

posted @ 2022-07-18 22:10  Armored_bear  阅读(60)  评论(0)    收藏  举报