题意:
给定一个a和b,问有多少个x符合a%x = b,若有限个输出个数,无限个输出infinity
思路:
当 a == b时,只要x>a都可以使得a%x == b
然后讨论a != b:
a%x == a-kx,令a-kx === b移项可得a-b == k*x
那么是不是只要枚举a-b的所有因子都可以成为x呢?
还有一个限制条件:a%x == b,0 <= b < x
#include <cstdio>
#include <iostream>
using namespace std;
typedef long long ll;
int ans = 0;
ll a,b;
void divide(ll n){
for(ll i = 1;i <= n/i;i++){
if(n%i == 0){
ll x = i,y = n/i;
if(x > b) ans++;
if(y > b&&x!=y) ans++;
}
}
}
int main(){
cin>>a>>b;
if(a==b) { puts("infinity");return 0;}
if(a < b) { puts("0");return 0;}
divide(a-b);
cout<<ans<<endl;
}