HDU 1098(条件满足 数学)
题意是问是否存在非负整数 a,使得任取非负整数 x,f(x) 能够被 65 整除,其中 f(x) = 5*x^13 + 13*x^5 + k*a*x,如存在,输出 a 的最小值,如不存在,输出 no。
由于 f(x) 的每一项都乘以 x,那么 f(x) = m*x (m为常数),若 65 | f(x) (即 f(x) 能够被 65 整除) ,则 65 | x*f(x),65 | x*x*f(x),...
取 f(1) = 5 + 13 + k*a = 18 + k*a;那么问题便转化成了给定 k,是否存在满足 65 | ( 18 + k*a ) 的 a 的值。当 a 超过 64 仍不满足条件时,则输出 no,
因为继续增大 a 只是 ( 18 + k*a ) % 65 的值开始在 1 - 65 之间循环,无法得到 ( 18 + k*a ) % 65 == 0 。
代码如下:
1 #include <bits/stdc++.h> 2 using namespace std; 3 int a,x,k,f; 4 int main() 5 { 6 while(~scanf("%d",&k)) 7 { 8 f = 1; 9 for(a = 0; a < 65; ++a) 10 { 11 if((k*a+18)%65 == 0) 12 { 13 f = 0; 14 printf("%d\n",a); 15 break; 16 } 17 } 18 if(f) puts("no"); 19 } 20 return 0; 21 }
特向这篇博客的作者致谢:https://www.cnblogs.com/kimsimple/p/7123343.html
日后若能有更好的想法,再来完善。
希望看到的大神不吝赐教 orz