• [恢]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 ;
    }



  • 相关阅读:
    1月6日 作业 穷举
    1.4 作业
    12月31日 作业
    12月29日-练习成果
    12月30日作业-<转>字符集编码
    1.22作业
    集合
    泛型
    CPU接口练习 (仅以此程序证明 某个同学真的有毒!有毒!!!)
    继承知识点总结
  • 原文地址:https://www.cnblogs.com/lzsz1212/p/2315304.html
Copyright © 2020-2023  润新知