取模性质,快速幂,快速乘,gcd和最小公倍数
一.取模运算
取模(取余)运算法则:
1. (a+b)%p=(a%p+b%p)%p;
2.(a-b)%p=(a%p-b%p)%p;
3.(a*b)%p=(a%p * b%p)%p;
4.(a^b)%p=( (a%p)^b )%p;
5. ( (a+b)%p+c )%p=( a+(b+c)%p )%p;
6.( a*(b*c)%p )%p =( c*(a*b)%p )%p;
7.( (a+b)%p*c )%p= ( (a*c)%p + (b*c)%p )%p;
几条重要性质:
1.a≡b%p,呢么对于任意的c都有 (a+c)≡(b+c)%p, (a*c)≡(b*c)%p;
2.a≡b%p,c≡d%p呢么 (a+c)≡(b+d)%p,(a*c)≡(b*d)%p;
关于取余运算(rem)与取模运算(mod)的区别:
网上资料显示是他们的运算方式导致了有负数时出现不同结果
rem(a,b)=a-b*fix(a/b),是采用了fix()函数 向0方向取整(并且结果的正负一定与被除数 a 相同)
mod(a,b)=a-b*floor(a/b),采用了floor()函数 向负无穷方向取整 (并且结果的正负一定与除数 b 相同)
示例:mod(4,-3)= (4-(-3)*(-1.3) )= - 2 ; rem(4,-3)= (4-(-3)(-1.3) )= + 1; (我的DEV5.11采用的是rem)
快速幂,快速乘,gcd,最小公倍数模板代码:
#include<iostream>
#include<algorithm>
using namespace std;
/* 快速幂 ,快速乘,gcd,取模(取余)预算法则与取余预算区别*/
int main()
{
int a,b,c,d;
long long sum1=,sum2=;
cin>>a>>b>>c>>d; /*快速幂*/
while(b)
{
if(b%==)
sum1*=a;
b/=;
a*=a;
}
/*快速幂*/
cout<<sum1<<endl<<endl;
while(d)
{ if(d&)
sum2*=c;
c*=c;
d>>=;
}
cout<<sum2<<endl<<endl; /*快速乘*/
cin>>a>>b;
long long res=;
while(b!=)
{
if(b%==) res+=a;
a+=a;
b/=;
}
cout<<res<<endl<<endl;
/*快速乘 */
while(b>)
{
if (b&!=) res+=a;
a+=a;
b>>=;
}
cout<<res<<endl<<endl;
/* gcd */
int t,product;
cin>>a>>b;
product=a*b;
while(b)
{
t=b;
b=a%b;
a=t;
}
cout<<a<<" ";
cout<<"最小公倍数乘积除以最大公约数"
<<product/a<<endl<<endl;
cin>>a>>b;
/*百度大神代码*/
while(b^=a^=b^=a%=b);
cout<<a<<endl<<endl;
return ;
}
取模性质,快速幂,快速乘,gcd和最小公倍数的更多相关文章
- HDU 4549 矩阵快速幂+快速幂+欧拉函数
M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Sub ...
- 组合数取模Lucas定理及快速幂取模
组合数取模就是求的值,根据,和的取值范围不同,采取的方法也不一样. 下面,我们来看常见的两种取值情况(m.n在64位整数型范围内) (1) , 此时较简单,在O(n2)可承受的情况下组合数的计算可以 ...
- A^B mod C (快速幂+快速乘+取模)题解
A^B mod C Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,B,C<2^63). ...
- ACM:a^b%p-数论-快速幂-快速乘
a^b Time Limit: 1000MS Memory Limit: 65535KB 64bit IO Format: Description 求a的b次方,取模mod(1<=a,b ...
- BZOJ-2875 随机数生成器 矩阵乘法快速幂+快速乘
题目没给全,吃X了... 2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1479 Solved: 829 ...
- [学习笔记]快速幂&&快速乘
本质:二进制拆分(你说倍增我也没脾气).然后是一个配凑. 合起来就是边二进制拆分,边配凑. 快速乘(其实龟速):把乘数二进制拆分.利用乘法分配率. 用途:防止爆long long 代码: ll qk( ...
- BZOJ 2751 容易题(easy) 快速幂+快速乘
2751: [HAOI2012]容易题(easy) Description 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下:有一个数列A已知对于所有的A[i] ...
- HDU - 5187 zhx's contest(快速幂+快速乘法)
作为史上最强的刷子之一,zhx的老师让他给学弟(mei)们出n道题.zhx认为第i道题的难度就是i.他想要让这些题目排列起来很漂亮. zhx认为一个漂亮的序列{ai}下列两个条件均需满足. 1:a1. ...
- TZOJ 5291 游戏之合成(快速幂快速乘)
描述 zzx和city在玩一款小游戏的时候,游戏中有一个宝石合成的功能,需要m个宝石才可以合成下一级的宝石(例如需要m个1级宝石才能合成2级宝石). 这时候zzx问city说“我要合成A级宝石需要多少 ...
随机推荐
- Servlet(六):Cookie
Cookie 学习:问题: HTTP 协议是没有记忆功能的,一次请求结束后,相关数据会被销毁.如果第二次的请求需要使用相同的请求数据怎么办呢?难道是让用户再次请求书写吗?解决: 使用 Cookie 技 ...
- 【转】C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。
C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子. 标签: c#objectnewlineexceptionbytestring 2010-05-17 01:10 117109人阅读 ...
- Android的Launcher启动流程 “Launcher部分启动流程”
研究代码从:AndroidManifest.xml.自定义的Application.java开始. Android系统启动时,系统需要一个Home应用程序来负责将这些应用程序展示出来:也就是该应用的目 ...
- 潭州课堂25班:Ph201805201 tornado 项目 第六课 用户和图片分享的集成(课堂笔记)
tornado 相关说明 改善图片上传功能 ,生成唯一的 ID ,与路径拼接,生成 URL, 这里引用 uuid 的 python 库 在 photo.py 中创建个类,用来 辅助用户上传的图片,生 ...
- Express内置方法
创建一个 Express 应用.express()是一个由 express 模块导出的入口(top-level)函数. //最顶级:top-level 内置方法 express.static(root ...
- Linux bash基础特性二
shell脚本的组成部分 shebang 各种命令组合 编程变量种类 本地变量: 仅仅在当前的shell生效 环境变量: 在当前和子shell生效 局部变量: shell进程某代码片段 位置变量: $ ...
- TestNG 中DataProvider 的用法
使用DataProvider提供数据有两种形式: 第一种:一种是在测试代码和测试数据放在同一个类中: 第二种:把所有的数据提供都单独写在一个类里面,当测试数据比较多时,这种方法利于维护. DataPr ...
- NOIP-金币
题目描述 国王将金币作为工资,发放给忠诚的骑士.第一天,骑士收到一枚金币:之后两天(第二天和第三天),每天收到两枚金币:之后三天(第四.五.六天),每天收到三枚金币:之后四天(第七.八.九.十天),每 ...
- __x__(23)0907第四天__浏览器默认样式
浏览器默认样式: 为了美观,浏览器为了在页面没有样式时,也可以有一个较好的显示效果,默认设置若干 margin,padding. 作为开发人员,在CSS编写最初,一般都会清除默认样式, ...
- vue_class 绑定_style 绑定
1. class 绑定 data: { myClass: "bClass", hasA: true, hasB: false } 字符串模式: 类名不确定 <p class= ...