t
a
g
:
tag :
tag:gcd
数论
*800(看着不想800的啊 QAQ)
传送门 :
题意 : 给定 l , r , k l,r,k l,r,k询问是否可以操作最多 k k k使其满足条件
条件 : 对于 l , r l,r l,r确定的数组 a [ 1... ( r − l + 1 ) ] = { l , l + 1.... r } a[1...(r-l+1)] =\{l,l+1....r\} a[1...(r−l+1)]={l,l+1....r}
每次操作可以从中选取两个数 a [ i ] , a [ j ] a[i],a[j] a[i],a[j],删除这两个数,将这两个数的乘积加入数组中
当且仅当 g c d ( a ) > 1 gcd(a)>1 gcd(a)>1的时候满足条件
思路 : 因为 g c d ( 奇 数 , 偶 数 ) = 1 gcd(奇数,偶数) =1 gcd(奇数,偶数)=1因此我们考虑从 奇偶性入手
显然的 g c d ( 偶 数 , 偶 数 ) > = 2 gcd(偶数,偶数) >=2 gcd(偶数,偶数)>=2,同时又因为 奇 数 ∗ 偶 数 = 偶 数 奇数*偶数=偶数 奇数∗偶数=偶数
因此我们需要尽可能的消去 奇数, 因此我们只需要判断奇数的个数即可
code :
int n,m,k;
void solve(){
int l,r,k,num;
cin>>l>>r>>k;
if(l==r&&l!=1){
cout
关注
打赏