(扩展)欧几里德快速幂

 

GCD模板

__int64 gcd(__int64 a,__int64  b)
{return b==0? a:gcd(b,a%b);
}

 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理:

  gcd函数就是用来求(a,b)的最大公约数的。

  gcd函数的基本性质:

  gcd(a,b)=gcd(b,a)=gcd(-a,b)=gcd(|a|,|b|)

证明:

基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b)。

第一种证明:

      a可以表示成a = kb + r,则r = a mod b

  假设d是a,b的一个公约数,则有

  d|a, d|b,而r = a - kb,因此d|r

  因此d是(b,a mod b)的公约数

  假设d 是(b,a mod b)的公约数,则

  d | b , d |r ,但是a = kb +r

  因此d也是(a,b)的公约数

  因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证。

第二种证法:

第二种证明:

    要证欧几里德算法成立,即证: gcd(a,b)=gcd(b,r),其中 gcd是取最大公约数的意思,r=a mod b
    下面证 gcd(a,b)=gcd(b,r)
    设  c是a,b的最大公约数,即c=gcd(a,b),则有 a=mc,b=nc,其中m,n为正整数,且m,n互为质数
    由 r= a mod b可知,r= a- qb 其中,q是正整数,
    则 r=a-qb=mc-qnc=(m-qn)c
    b=nc,r=(m-qn)c,且n,(m-qn)互质(假设n,m-qn不互质,则n=xd, m-qn=yd 其中x,y,d都是正整数,且d>1
                                                                则a=mc=(qx+y)dc, b=xdc,这时a,b 的最大公约数变成dc,与前提矛盾,
                                                                 所以n ,m-qn一定互质)
    则gcd(b,r)=c=gcd(a,b)
    得证。

 

扩展欧几里德定理

  对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整

  数对 x,y ,使得 gcd(a,b)=ax+by。

证明:

基本算法:对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ,使得 gcd(a,b)=ax+by。

证明:设 a>b。

  1,显然当 b=0,gcd(a,b)=a。此时 x=1,y=0;

  2,ab!=0 时

  设 ax1+by1=gcd(a,b);

  bx2+(a mod b)y2=gcd(b,a mod b);

  根据朴素的欧几里德原理有 gcd(a,b)=gcd(b,a mod b);

  则:ax1+by1=bx2+(a mod b)y2;

  即:ax1+by1=bx2+(a-(a/b)*b)y2=ay2+bx2-(a/b)*by2;

  根据恒等定理得:x1=y2; y1=x2-(a/b)*y2;

     这样我们就得到了求解 x1,y1 的方法:x1,y1 的值基于 x2,y2.

   上面的思想是以递归定义的,因为 gcd 不断的递归求解一定会有个时候 b=0,所以递归可以结束。

以上来自 这篇博客 具体应用可以继续看这篇文章

模板

int exgcd(int a,int b,int &x,int &y)
{if(b == 0){x = 1; y = 0; return a;}int d = exgcd(b, a % b,x,y);int temp = x;x = y;y = temp - a / b * y;return d;
}

 快速幂取模

http://blog.csdn.net/hkdgjqr/article/details/5381292

快速幂取模就是在O(logn)内求出a^n mod b的值。算法的原理是ab mod c=(a mod c)(b mod c)mod c

二分递归

long exp_mod(long a,long n,long b)
{long t;if(n==0) return 1%b;if(n==1) return a%b;t=exp_mod(a,n/2,b);t=t*t%b;if((n&1)==1) t=t*a%b;return t;
}

基于二进制

LL q_mod(LL a,LL b)
{
LL d,t;
d = 1,t=a;
while(b)
{
if(b&1) d = (d*t)%mod;
b/=2;
t = (t*t)%mod;
}
return d;
}

 http://acm.hdu.edu.cn/showproblem.php?pid=2817

View Code
 1 #include<stdio.h>
 2 #define N 200907
 3 __int64 exp_mod(__int64 a,__int64 b)
 4 {
 5     __int64 d,t;
 6     d = 1;
 7     t = a;
 8     while(b>0)
 9     {
10         if(b%2==1)
11             d = d*t%N;
12         b=b/2;
13         t = t*t%N;
14     }
15     return d;
16 }
17 int main()
18 {
19     __int64 n,m,a1,a2,a3,d,s,x;
20     int i,j,k,t;
21     scanf("%d", &t);
22     while(t--)
23     {
24         scanf("%I64d%I64d%I64d%d",&a1,&a2,&a3,&k);
25         if(a2-a1==a3-a2)
26         {
27             d = a3-a2;
28             s = (a1%N+d*(k-1)%N)%N;
29             printf("%I64d\n",s);
30         }
31         else
32         {
33             x = a3/a2;
34             printf("%I64d\n",(a1*exp_mod(x,k-1))%N);
35         }
36     }
37     return 0;
38 }

 

 

转载于:https://www.cnblogs.com/shangyu/archive/2012/08/02/2620595.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379446.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Silverlight + WCF异步调用 例子

看大家好像对我的NParsing框架不是很感兴趣&#xff08;写NParsing帖没人顶我&#xff09;&#xff0c;那就给大家来点“甜品”&#xff0c;换换口谓。来说说Silverlight方面的东西。 在Silverlight中数据通信只能用异步。有人会觉得写起来很麻烦&#xff0c;其实不然。也有很简…

小议SqlMapConfig.xml配置文件

①、mybatis-3-config.dtd 主要用于mybatis的核心配文件sqlMapConfig.xml的约束 sqlMapConfig.xml代码如下&#xff1a; <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN&q…

ffmepg 命令提取音视频数据

原文件&#xff1a; 1&#xff1a; 原音频数据提取&#xff08;保留还是mp4的封装格式的&#xff09;&#xff1a; ffmpeg -i test_1920x1080.mp4 -acodec copy -vn audio.mp4 -vn 就是没有视频&#xff0c; -acodec copy 音频拷贝不进行任何转码 原视频数据提取&#xff0…

【7】jQuery学习——入门jQuery选择器之过滤选择器-可见性过滤选择器

这篇什么都不说&#xff0c;看标题就知道了&#xff0c;很简单&#xff0c;就2个选择器&#xff0c;嘿嘿 选择器描述返回$("Element:hidden")选取所有不可见的元素集合元素$("Element:visible")选取所有可见元素集合元素这篇很简单吧&#xff0c;就2个&…

Mybatis中的核心配置文件SqlMapConfig.xml详细介绍

一、properties&#xff08;属性&#xff09; 可以引用java属性文件中的配置信息如下 jdbc.properties代码如下&#xff1a; jdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/mybatis?characterEncodingutf-8 jdbc.usernameroot jdbc.passwordbeyond…

用Kotlin开发您的第一个应用程序| Android与Kotlin

In the previous article, we learned how to setup Kotlin in the android studio? Now moving to journey ahead we are going to develop our first app with Kotlin. It is the basic app, but it will let you know the structure of the program. 在上一篇文章中&#x…

(只需挨个复制粘贴命令即可部署)在Centos7下搭建文件服务器(VSFTPD)

观看北京尚学堂-百战程序员笔记一、VSFTPD简介 Linux的组件&#xff08;一款软件&#xff09;&#xff0c;安装到Linux后可以通过java代码&#xff08;FtpClient&#xff09;实现文件的上传。基于FTP协议。 由于VSFTPD是基于FTP协议&#xff0c;客户端浏览器是需要通过http协议…

bcd码二进制转十进制_二进制编码的十进制(BCD码)及其加法

bcd码二进制转十进制Prerequisite: Number systems 先决条件&#xff1a; 数字系统 BCD Code (8421 Code): In BCD 8421 code, each decimal digit is represented using a 4-bit binary number. The 4-bit binary numbers have their weights attached as 8, 4, 2, 1 from MS…

LINQ to XML:如何读写XCData

using System;using System.Xml.Linq;namespace ConsoleApplication1 {class Program{static void Main(string[] args){//写入CDATA元素块var doc new XElement("Test",new XElement("User",new XAttribute("name", "chenxizhang"),…

云服务器(Centos)部署SVN

1&#xff0c;安装svn yum install subversion 2&#xff0c;查看版本号 svnserve --version 3&#xff0c;创建SVN版本库&#xff08;在var/svn 文件夹下&#xff09; 新建文件夹 mkdir -p /var/svn/svnrepos 创建版本库 svnadmin create /var/svn/svnrepos 4&#xff0c;修改…

ffmpeg命令mp3中提取pcm格式

原mp3文件: ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -f s16le 48000_2_s16le.pcm &#xff08;这可能是pcm原格式查不到什么信息但是可以播放的&#xff1a;ffplay -ar 48000 -ac 2 -f s16le 48000_2_s16le.pcm&#xff09; ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -samp…

bfs广度优先搜索算法_图的广度优先搜索(BFS)

bfs广度优先搜索算法What you will learn? 您将学到什么&#xff1f; How to implement Breath first search of a graph? 如何实现图的呼吸优先搜索&#xff1f; Breadth First Search is a level-wise vertex traversal process. Like a tree all the graphs have verte…

ffmpeg 命令转封装

1&#xff1a; 改变编码格式 原mp4文件:视频是h264 音频是aac 视频转成h265&#xff0c;音频转成mp3&#xff08;容器为mkv&#xff0c;有些容器不一定支持放h265的&#xff09; ffmpeg -i test_60s.mp4 -vcodec libx265 -acodec libmp3lame out_h265_mp3.mkv 播放&#xff1a…

弗林的计算机体系结构分类

计算机体系结构分类 (Classification of computer architecture) According to Flynns there are four different classification of computer architecture, 根据弗林的说法&#xff0c;计算机体系结构有四种不同的分类&#xff0c; 1)SISD(单指令单数据流) (1) SISD (Single…

Assert和异常处理

Assert用于检查不应该发生情况&#xff0c;用来帮助开发人员对问题的快速定位。异常处理用于对程序发生异常情况的处理&#xff0c;增强程序的健壮性、容错性&#xff0c;减少程序使用中对用户不有好的行为&#xff0c;不让(通常也不必)用户知道发生了什么错误。实际开发中&…

ffmpeg 命令裁剪合并

1 mp4格式&#xff1a; 裁剪从一个视频中的1分钟、2分钟、3分钟开始截取10秒 ffmpeg -i test_1280x720.mp4 -ss 00:01:00 -t 10 -codec copy copy1.mp4 ffmpeg -i test_1280x720.mp4 -ss 00:02:00 -t 10 -codec copy copy2.mp4 ffmpeg -i test_1280x720.mp4 -ss 00:03:00 -t 10…

Struts2初始化流程及源码分析

1.1 Struts2初始化 在讲Struts2的初始化之前&#xff0c;应该为大家描述下Web应用中的过滤器Filter&#xff0c;这关系到我们对核心过滤器FilterDispatcher的正确理解。 Filter&#xff1a;一个filter是一个对象&#xff0c;为每个请求资源(一个servlet或静态内容) &#xff0c…

ffmpeg 命令图片和视频相互转换

1当前文件环境&#xff1a; ffmpeg -i test.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 640x360 test.jpg ffmpeg -i test.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 640x360 test.bmp 使用ffplay test.jpb ffplay test.bmp 都是可以打开的 参数介绍&#xff1a; -y 如…

ffmpeg命令 拉流

1&#xff1a; 拉流播放:rtmp &#xff08;ffplay rtmp://server/live/streamName&#xff09; ffplay -x 480 -y 320 rtmp://58.200.131.2:1935/livetv/cctv1 2&#xff1a; 拉流存储到文件:rtmp ffmpeg -i rtmp://58.200.131.2:1935/livetv/cctv1 -codec copy cctvrtmp.f…

ffmpeg 命令过滤器裁剪

1 图片操作&#xff1a; 原图&#xff1a; 使用ffplay 显示左半边 ffplay -i input.png -vf cropiw/2:ih:0:0 可以通过ffmpeg 保存 ffmpeg -i input.png -vf cropiw/2:ih:0:0 out.png 2 视频操作&#xff1a; 原视频&#xff1a; 显示左半边 ffplay -i cctvhttp.flv -vf …