HDU 1098 [Ignatius's puzzle] 数论

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1098

题目大意:f(x)=5x^13+13x^5+kax. 给出k,求a使得对任意x,满足f(x)是65的倍数

关键思想:f(x)要是65的倍数,需满足f(x)既是5的倍数又是13的倍数。

1.f(x)为5的倍数需满足

        f(x) % 5 = 0

5x^13+13x^5+kax % 5 = 0

    x(13x^4+ka) % 5 = 0  对任意x成立

        13+ka % 5 = 0  //费马小定理

      3 +ka % 5 = 0  

        ka % 5 = 2

2.f(x)为13的倍数需满足

      同理得ka % 13=8

于是升序遍历a,若满足以上两个条件,则输出。a最多为64,因为%65有一个循环

代码如下:

#include <iostream>
using namespace std;

int main(){
    int k;
    while(cin>>k){ 
        int a;
        for(a=0;a<65;a++){//f(x)%65,故kax里的a不会大于65 
            if(k*a%5==2&&k*a%13==8){//f(x)要是5的倍数也要13的倍数,分析结合费马小定理。
                cout<<a<<endl;
                break;
            }
        }
        if(a==65)cout<<"no"<<endl;//没找到 
    }
    return 0;
} 

 

    原文作者:哇咔咔咔
    原文地址: https://www.cnblogs.com/G-M-WuJieMatrix/p/7399599.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞