HDU 1098 Ignatius's puzzle

这道题算是认真读了,算是以前没有仔细去研究一下不懂的符号,今天意淫出来的。呵呵

题意就是满足公式f(x)=5·x^(13)+13·x^(5)+k·a·x的情况下,求一个最小的a,使得对于任何一个x都满足65|f(x)

1.既然对整数x是任意满足的(除了0),那么取x=1就可以很快化简得公式(18+a·k)%65==0

2.有了上面的公式之外,可以进行暴力。

3.如果直接暴力超时。可以注意到第66次和第1次是相同的,因为将公式化简后,出现了周期消去。此处不解释了

 1 #include <stdio.h>int main()
 2 {
 3     int k,ok,n;
 4     while(scanf("%d",&k)!=EOF)
 5     {
 6         ok=0;
 7         for(int i=1;i<=65;i++)
 8         {
 9             if((18+i*k)%65==0)
10             {
11                 printf("%d
",i);
12                 ok=1;
13                 break;
14             }
15         }
16         if(!ok) puts("no");
17     }
18     return 0;
19 }
View Code
原文地址:https://www.cnblogs.com/cton/p/3438498.html