HDU 1098 Ignatius's puzzle 费马小定理+扩展欧几里德算法

题目大意:

给定k,找到一个满足的a使任意的x都满足 f(x)=5*x^13+13*x^5+k*a*x 被65整除

推证:

f(x) = (5*x^12 + 13 * x^4 + ak) * x

因为x可以任意取 那么不能总是满足 65|x

那么必须是 65 | (5*x^12 + 13 * x^4 + ak)

那么就是说 x^12 / 13 + x^4 / 5 + ak / 65 正好是一个整数

假设能找到满足的a , 那么将 ak / 65 分进x^12 / 13 + x^4 / 5中得到 (x^12+t1 ) / 13 + (x^4+t2) / 5 这两项均为整数

那么5*t1+13*t2 = ak

而这里 13|(x^12+t1 )     5| (x^4+t2)

这里13 , 5均是素数

根据费马小定理可得 x^12 = 1 mod13  x^4 = 1 mod 5

那么t1 = 12 + 13*k1 , t2 = 4 + 5*k2

将t1 t2带入5*t1+13*t2 = ak

那么就是5*(12 + 13*k1) +13*(4 + 5*k2) = ak

->65(k1+k2)+112 = ak

这里k已知 , 求a看做y , k1+k2为整数,看成是x即可

那么就是求65x+ay=-112

这里就是求扩展欧几里得了

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cmath>
 5 #include <ctime>
 6 #include <cstdlib>
 7 #include <vector>
 8
 9 using namespace std;
10 #define ll long long
11 #define N 500
12 #define pii pair<int,int>
13
14 void ex_gcd(ll a , ll b , ll &x , ll &y , ll &d)
15 {
16     ll t;
17     if(b==0){d=a,x=1,y=0;}
18     else{
19         ex_gcd(b , a%b , x , y , d);
20         t=x , x=y , y=t-a/b*y;
21     }
22 }
23
24
25 int main() {
26    // freopen("a.in" , "r" , stdin);
27    // freopen("out.txt" , "w" , stdout);
28     int a;
29     while(~scanf("%d" , &a)){
30         ll x , y , d;
31         ex_gcd((ll)65 , (ll)a , x , y , d);
32         if(112%d!=0) puts("no");
33         else{
34             printf("%I64d\n" , ((112/d*y%65)+65)%65);
35         }
36     }
37 }

HDU 1098 Ignatius's puzzle 费马小定理+扩展欧几里德算法

时间: 2024-10-21 12:30:14

HDU 1098 Ignatius's puzzle 费马小定理+扩展欧几里德算法的相关文章

同余|欧拉定理|费马小定理|扩展欧拉定理|扩展欧几里得算法

目录 同余 基本定理 欧拉定理 费马小定理 扩展欧拉定理 扩展欧几里得算法 同余 基本定理 欧拉定理 若a,m互质,则 \[ a^{\varphi\left ( m \right )}\equiv 1\left ( mod \ m \right ) \] 应用 令,,这两个数是互素的.比5小的正整数中与5互素的数有1.2.3和4,所以.计算:,而.与定理结果相符. 计算的个位数,实际是求被10除的余数.7和10互素,且.由欧拉定理知.所以. 费马小定理 若p是质数,则对于任意整数a,都有 \[

hdu 4549 (矩阵快速幂+费马小定理)

题意:已知F0=a,F1=b,Fn=Fn-1*Fn-2,给你a,b,n求Fn%1000000007的值 思路:我们试着写几组数 F0=a F1=b F2=a*b F3=a*b2 F4=a2*b3 F5=a3*b5 我们发现a,b的系数其实是斐波那契数列,我们只需用矩阵快速幂求出相应系数就行,但是 这个系数随着增长会特别大,这时我们需要利用费马小定理进行降幂处理 费马小定理 ap-1≡1(mod p) 代码: #include <iostream> #include <cmath>

HDU 5793 A Boring Question (费马小定理) ---2016杭电多校联合第六场

A Boring Question Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 156    Accepted Submission(s): 72 Problem Description There are an equation.∑0≤k1,k2,?km≤n∏1?j<m(kj+1kj)%1000000007=?We define t

HDU 4704 Sum (隔板原理 + 费马小定理)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4704 题意: 给定一个数n 将其分解,Si 表示将n拆成i个数的方案数 求sum( si ) 1<=i<=n; 分析: 隔板原理,  n个木棍,n-1个缝, 分成1份则是C(n-1,0); 分成2份则是C(n-1,1); 分成3份则是C(n-1,2); ... 分成n份则是C(n-1,n-1); ans = sum( C(n-1,i) )   (0<=i<=n-1) =2^(n-1)

HDU - 1098 - Ignatius&#39;s puzzle (数论 - 费马小定理)

Ignatius's puzzle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7012    Accepted Submission(s): 4847 Problem Description Ignatius is poor at math,he falls across a puzzle problem,so he has no

HDU 1098 [Ignatius&#39;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  //费马小定

HDU 1098 Ignatius&#39;s Puzzle(解法汇集)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1098 题意: 求针对输入的k,能否找到一个最小的a,使得当x取任意自然数时,f(x)=5*x^13+13*x^5+k*a*x始终能被65整除. 我的解法: 取f(1),f(2)两个特殊值得. 1.       5+13+k*a=65*T1  ->> k*a=47+65*T3 2.       5*2^13+13*2^5+2*k*a=65*T2  ->>  41376+2*k*a=65*

HDU - 1098 - Ignatius&#39;s puzzle - ax+by=c

http://acm.hdu.edu.cn/showproblem.php?pid=1098 其实一开始猜测只要验证x=1的时候就行了,但是不知道怎么证明. 题解表示用数学归纳法,假设f(x)成立,证明f(x+1)成立需要什么条件. 代入之后发现有很多二项式系数,导致他们都是65的倍数,剩下的恰好就是 f(x) 和 18+ka . 那么只需要找到最小的a使得 18+ka是65的倍数. 题解说,毕竟65毕竟小,可以枚举a.因为a+65与a的对65的余数是一样的,所以只要枚举0到64就可以了. 我的

hdu 4549 M斐波那契数列(快速幂 矩阵快速幂 费马小定理)

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4549: 题目是中文的很容易理解吧.可一开始我把题目看错了,这毛病哈哈. 一开始我看错题时,就用了一个快速幂来解,不用说肯定wa,看题目的通过率也不高,我想会不会有啥坑啊.然而我就是那大坑,哈哈. 不说了,直接说题吧,先讨论k=1,2,3;时的解.这应该会解吧,不多说了: 从第四项开始f(4)=a^1+b^2;f(5)=a^2+b^3;f(6)=a^3+b^5......; 看出来了吧,a上的指数成斐波