• 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;
    }
    天晴了,起飞吧
  • 相关阅读:
    Python基础-面向对象1
    Centos升级安装.Net core 1.1
    员工大规模离职事件的处理方法和启示
    React Redux学习笔记
    Tfs 2015 代理池配置笔记
    自动化测试UI Test, Performance Test, Load Test 总结整理
    [转]【长文干货】浅析分布式系统
    .Net身份验证概述
    Owin中间件搭建OAuth2.0认证授权服务体会
    使用Owin中间件搭建OAuth2.0认证授权服务器
  • 原文地址:https://www.cnblogs.com/jianqiao123/p/11431198.html
Copyright © 2020-2023  润新知