zoukankan      html  css  js  c++  java
  • HDU1098 Ignatius's puzzle

    Problem Description

    Ignatius is poor at math,he falls across a puzzle problem,so he has no choice but to appeal to Eddy. this problem describes that:f(x)=5*x^13+13*x^5+k*a*x,input a nonegative integer k(k<10000),to find the minimal nonegative integer a,make the arbitrary integer x ,65|f(x)if
    no exists that a,then print "no".

    Input

    The input contains several test cases. Each test case consists of a nonegative integer k, More details in the Sample Input.

    Output

    The output contains a string "no",if you can't find a,or you should output a line contains the a.More details in the Sample Output.

    Sample Input

    11 100 9999

    Sample Output

    22 no 43

    解题思路:题意比较简单,就是输入一个数k,求最小的数a使得f(x)对于任意的x都能被65整除;

    要让f(x)被65整除,可以把f(x)看作是13和5的倍数:现考虑f(x)是5的倍数,则有(13*x^5+k*a*x)%5==0 <=> x(13*x^4+k*a)%5==0,由于x取任意值,当x不能被5整除时,

    即x与5互素,则13*x^4+k*a要能被5整除,由费马小定理,得(x^4) mod 5== 1,所以有(13+k*a)%5==0,所以(k*a)%5==2,同理(k*a)%13==8,可知如果k能被5整除或者能被

    8整除时均找不到对应的a值,所以直接输出no,又因为先考虑(k*a)%5==2中:k%5==1、2、3、4,然后枚举a,只要满足(k*a)%13==8,即可输出a值。大致思路就是这样啦;

     

    代码如下:

    #include <cstdio>
    int main(){
        int tab[5]={0,2,1,4,3};
        int k,a;
        while(~scanf("%d",&k)){
            if(k%5==0||k%13==0){
                printf("no
    ");
                continue;
            }
            for(a=tab[k%5];;a+=5){
                if(k*a%13==8){
                    printf("%d
    ",a);
                    break;
                }
            }
        }
        return 0;
    }
    天晴了,起飞吧
  • 相关阅读:
    【转-整理】win764bit plsql 登录oracle11g ora-12154 问题汇总
    【转-整理】log4j 简单解释,配置
    sparsity and density
    转:Recsys2013论文导读
    学院研究生论坛-如何做研究
    推荐系统开源软件列表
    linux下如何用GDB调试c++程序
    全国大学生数据挖掘邀请赛中的NDCG
    网络科学自学资料
    科普文:从人人网看网络科学(Network Science)的X个经典问题
  • 原文地址:https://www.cnblogs.com/jianqiao123/p/11431198.html
Copyright © 2011-2022 走看看