可用欧几里得扩展证明, ,若有整数解则
传送门:Infinite Fence
题意:判断
之间 r的倍数是否少于k
#include<bits/stdc++.h>
using namespace std;
int main(){
int T;
scanf("%d",&T);
while(T--){
int r,b,k;
scanf("%d%d%d",&r,&b,&k);
int t=__gcd(r,b);
if((max(r,b)-t-1)/min(r,b)+1<k) cout<<"OBEY"<<endl;
else cout<<"REBEL"<<endl;
}
return 0;
}
的所有因子是a,b的所有公约数.
将a,b分解质因子,g=gcd(a,b),质因子的指数
,所以这些公共质因子组成了g,他们所有的公约数都是有这些质因子组成的,所以直接求g的因子。
传送门:约数
题意:求a,b的全部公约数
#include<bits/stdc++.h>
using namespace std;
set<long long> st;
int main(){
long long a,b;
scanf("%lld%lld",&a,&b);
long long Gcd=__gcd(a,b);
long long t=sqrt(Gcd);
for(int i=1;i<=t;++i){
if(Gcd%i==0){
st.insert(i);
if(Gcd/i!=i) st.insert(Gcd/i);
}
}
set<long long > ::iterator it=st.begin();
for(;it!=st.end();++it){
cout<<*it<<" ";
}
return 0;
}
传送门:A. Good ol’ Numbers Coloring
题意:可以把
号牌子涂成白色,其他为黑色,假设有1-无穷个牌子,黑色牌子是否无穷
题解:
若有有限个黑色牌子,在某一位置开始后
都是白色,
连续需
才能连续
#include<bits/stdc++.h>
using namespace std;
set<int> s;
int main(){
int T;
scanf("%d",&T);
while(T--){
int a,b;
s.clear();
scanf("%d%d",&a,&b);
if(__gcd(a,b)==1){
cout<<"Finite"<<endl;
}
else cout<<"Infinite"<<endl;
}
return 0;
}