[恢]hdu 1098

2011-12-20 17:20:41

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1098

题意:给出k。求使得f(x)=5*x^13+13*x^5+k*a*x对任意x都为65的倍数的a的最小值。

mark:65=13*5。要使f(x)是65的倍数,只需要f(x)是5和13的倍数即可。先来分析13的。

若f(x)是13的倍数,

有5*x^13+13*x^5+k*a*x % 13 == 0,其中13*x^5项显然不用考虑。

则只需5*x^13 + k*a*x是13的倍数,即x*(5*x^12+k*a)是13的倍数。若x是13的倍数,不用考虑。

若x不是13的倍数,则x一定与13互素,因为EulerPhi(13) == 12,从而x^12 % 13 == 1。

所以可知5*x^12 % 13 == 5。

因为要让任意x满足条件,则括号内必为13的倍数,有k*a+5 % 13 == 0,则k*a % 13 == 8。

同理可得k*a % 5 == 2。

据此,若k为5或13的倍数,a一定无解,否则,一定有解。

根据k%5的结果,可能为1、2、3、4,a应分别取5n+2,5n+1,5n+4,5n+3。

枚举a的值,若符合13的条件,则为解。

代码:

# include <stdio.h>

int tab5[5] = {0, 2, 1, 4, 3} ;


int main ()
{
int a, k ;
while (~scanf ("%d", &k))
{
if (k % 5 == 0 || k % 13 == 0)
printf ("no\n") ;
else
{
for (a = tab5[k%5] ; ; a+= 5)
if (k*a % 13 == 8) break ;
printf ("%d\n", a) ;
}
}
return 0 ;
}



posted @ 2012-01-06 23:17  Seraph2012  阅读(161)  评论(0编辑  收藏  举报