HDU 1098(条件满足 数学)

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
",a);
15                 break;
16             }
17         }
18         if(f) puts("no");
19     }
20     return 0;
21 }
View Code

特向这篇博客的作者致谢:https://www.cnblogs.com/kimsimple/p/7123343.html