HDU1098 Ignatius's puzzle -数论 费马小定理

Ignatius's puzzle

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 11555    Accepted Submission(s): 8113

 

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

给出一个函数:  f(x)=5*x^13+13*x^5+k*a*x
给定一个非负的k值 ,求最小的非负的a值,使得对任意的整数x都能使f(x)被65整除。
每输入一个k 值 ,对应输出一个 a值 ,若a值不存在的话,则输出 no 

 

方法一:数学归纳法:参考地址

假设任意X 都使 f(X)能被65 整除。

那么,X = 1 时成立 即  18 + k*a   能被65整除。

X = X + 1 亦成立 ,带入由二项式定理展开得  f(X) = 5*(c(13,0)x^13 + c(13,1)x^12....... c(13,13)x^0 ) + 13*(c(5,0)x^5.....) + kax + ka

因为f(x)=5*x^13+13*x^5+k*a*x , 所以5*x^13+13*x^5+k*a*x  能被 65 整除 。在上式中 c(13,0)、c(13,1).....显然含有因子13,与括号前5相乘等于65,因此能被65整除,  同理可得c(5,0).....

最后剩下 c(13,13)x^0 + c(5,5)x^0 + ka  = 18 + k*a不知能否被整除。

此式与 f(1) 相同, 因此 只要 枚举a,使18 + k*a 能被 65 整除, 则 f(X) 能被整除

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<ctime>
using namespace std;
int main()
{
    int n;
    while(cin >> n)
    {
        bool p = false;
        int ans;
        for(int i  = 1; i <= 65; i ++)
        {
            if((18+n*i)%65==0)
            {
                ans = i;
                p = true;
                break;
            }
        }
        if(p)cout << ans << endl;
        else cout << "no" << endl;
    }
    return 0;
}

方法二:费马小定理 

f(x)=5*x^13+13*x^5+k*a*x转化成f(x)=(5*x^12+13*x^4+k*a)*x

1.当x=65的倍数时就行了;

2.当x=5的倍数时则需要(5*x^12+k*a)是13的倍数,由费马小定理可知,因为x是5的倍数所以(x^(13-1)%13==1),所以(5*x^12%13==5),所以只需要做到k*a%13==8即可!

3.同理可得当x=13的倍数时,只需要做到(13*x^4+k*a)是5的倍数由费马小定理可知,因为x是5的倍数所以(x^(5-1)%5==1),所以(13*x^(5-1)%5==3),所以只需要做到k*a%5==2即可

4.当x不是上面的特殊数时,则需要f(x)=(5*x^12+13*x^4+k*a)*x被65整除,也就是需要同时满足上面那两个条件!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值