注解
1、题目说对于任意x成立,因此x=1时也成立,所以f(1)=18+ka,又因为需要f(1)%65=0,所以(18+ka)%65==0
2、因为(a+b) mod c = (a%c + b%c) %c,所以原式= (18%65+ka%65)%65,又因为(k*a)%65=(k%65) * (a%65) % 65,所以枚举a的范围只需要0-64即可。
代码
#include <iostream>
using namespace std;
//推导:由于任意x均成立,取x=1,f(x)=18+k*a,
// 65|f(x)的意思是f(x)%65==0,所以(18+ka)%65==0
//于是给定k,只需要枚举a从0到64即可,超过64取mod ,结果是一样的
int main() {
int k;
while(cin>>k) {
int ans = -1;
for(int i=0; i<65; i++) {
if((18+k*i)%65==0) {
ans = i;
break;
}
}
if(ans==-1) {
cout<<"no"<<endl;
} else {
cout<<ans<<endl;
}
}
return 0;
}