最简即最难
题目信息:
题目连接 5+(10×)
题目大意: 给你
a
,
b
a,b
a,b 问
a
≡
b
(
m
o
d
x
)
a \equiv b(modx)
a≡b(modx)中 ,
x
x
x 有几个解。
解题思路: 刚开始瞎想一通,什么线型方程,搞半天。最后问了学姐,这不就是 a − k x = b a-kx=b a−kx=b 吗。 a − b = k x , x ∣ ( a − b ) a-b=kx,x|(a-b) a−b=kx,x∣(a−b),找到 a a a 所有大于 b b b 的因子数就完啦啊!
学数论降智商…(我智商本来就不够学数论的)
注: 要讨论 a , b a,b a,b 大小关系,还有因子对相同的情况。
代码
#include <bits/stdc++.h>
using namespace std;
int n,m;
int main(){
scanf("%d%d",&n,&m);
if(m>=n){
if(m==n) printf("infinity\n");
else printf("0\n");
}
else{
int ans = 0;
for(int i=1;i<=(n-m)/i;++i){
if((n-m)%i==0){
if(i>m) ans++;
if((n-m)/i>m) ans++;
//因子i如果与(n-m)/i相同的话要减一
if(i>m&&(n-m)/i>m&&i==(n-m)/i) ans--;
//printf("%d %d \n",i,ans);
}
}
printf("%d\n",ans);
}
return 0;
}