快速幂 ,快速幂优化,矩形快速幂(java)
快速幂形式
public static int f(int a,int b,int c){
int ans =1;
int base=a;
while(b!=0){
if((b&1)!=0)
ans=(ans*base)%c;
base=(base*base)%c;
}
return ans;
}
快速乘法幂(优化)
幂转换成乘法,乘法转化成加法
public static int f(int a,int b,int c){
int ans = 0;
int base=a;
while(b!=0){
if((b&1)!=0)
ans=(ans+base)%c;
base=(base+base)%c;
b>>=1;
}
return ans;
}
public static int f1(int a,int b,int c){
int ans =1;
int base = a;
while(b!=0){
if((b&1)!=0)
ans= f(ans, base, c);
base=f(base, base, c);
b>>=1;
}
return ans;
}
矩阵快速幂
将快速幂里边的1换成一个单位矩阵,然后利用矩阵相乘。
public static long[][] mut(int k,int n,long[][]A){
long [][]res = new long[n][n];
for(int i=0;i<res.length;i++)
res[i][i]=1;
while(k!=0){
if((k&1)!=0)
res=f(res,A);
A=f(A,A);
k>>=1;
}
return res;
}
public static long[][] f(long[][]A,long[][] B){
long res[][]=new long[A.length][B.length];
for(int i=0;i<res.length;i++)
for(int j=0;j<res[0].length;j++){
for(int k=0;k<B.length;k++){
res[i][j]+=A[i][k]*B[k][j];
}
}
return res;
}
例题:蓝桥杯 --加强的斐波那契
斐波那契数列大家都非常熟悉。它的定义是:
f(x) = 1 .... (x=1,2)
f(x) = f(x-1) + f(x-2) .... (x> 2)
对于给定的整数 n 和 m,我们希望求出:
f(1) + f(2) + ... + f(n) 的值。但这个值可能非常大,所以我们把它对 f(m) 取模。
import java.util.*;
public class Main8 { //基本上是按模板写的
public static long[][] mut(int k,int n,long[][]A){
long [][]res = new long[n][n];
res[1][1]=1;
res[1][0]=0;
res[0][1]=0;
res[0][0]=1;
while(k!=0){
if((k&1)!=0)
res=f(res,A);
A=f(A,A);
k>>=1;
}
return res;
}
public static long[][] f(long[][]A,long[][] B){
long res[][]=new long[A.length][B.length];
for(int i=0;i<res.length;i++)
for(int j=0;j<res[0].length;j++){
for(int k=0;k<B.length;k++){
res[i][j]+=A[i][k]*B[k][j];
}
}
return res;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
long a[][]=new long [2][2];
a[0][0]=1;
a[1][1]=0;
a[0][1]=1;
a[1][0]=1;
long d[][]=mut(n-1,2,a );
System.out.println(d[0][0]%1000000009);
}
}
快速幂 ,快速幂优化,矩形快速幂(java)的更多相关文章
- 【板子】gcd、exgcd、乘法逆元、快速幂、快速乘、筛素数、快速求逆元、组合数
1.gcd int gcd(int a,int b){ return b?gcd(b,a%b):a; } 2.扩展gcd )extend great common divisor ll exgcd(l ...
- Luogu 3390 【模板】矩阵快速幂 (矩阵乘法,快速幂)
Luogu 3390 [模板]矩阵快速幂 (矩阵乘法,快速幂) Description 给定n*n的矩阵A,求A^k Input 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵 ...
- 「干货」面试官问我如何快速搜索10万个矩形?——我说RBush
「干货」面试官问我如何快速搜索10万个矩形?--我说RBUSH 前言 亲爱的coder们,我又来了,一个喜欢图形的程序员,前几篇文章一直都在教大家怎么画地图.画折线图.画烟花,难道图形就是这样嘛,当 ...
- 微信快速开发框架(六)-- 微信快速开发框架(WXPP QuickFramework)V2.0版本上线--源码已更新至github
4月28日,已增加多媒体上传及下载API,对应MediaUploadRequest和MediaGetRequest ------------------------------------------ ...
- 怎么关闭win10快速访问功能?关闭Windows10系统快速访问方法
怎么关闭win10快速访问功能?关闭Windows10系统快速访问方法 Windows10系统的"快速访问"功能很容易泄露电脑中的隐私,用什么方法可以让这个功能消失,避免电脑的个人 ...
- ASP.NET Core模块化前后端分离快速开发框架介绍之2、快速创建一个业务模块
源码地址 GitHub:https://github.com/iamoldli/NetModular 演示地址 地址:https://nm.iamoldli.com 账户:admin 密码:admin ...
- Serverless 初体验:快速开发与部署一个Hello World(Java版)
昨天被阿里云的这个酷炫大屏吸引了! 我等85后开发者居然这么少!挺好奇到底什么鬼东西都是90.95后在玩?就深入看了一下. 这是一个关于Serverless的体验活动,Serverless在国内一直都 ...
- poj 3735 Training little cats 矩阵快速幂+稀疏矩阵乘法优化
题目链接 题意:有n个猫,开始的时候每个猫都没有坚果,进行k次操作,g x表示给第x个猫一个坚果,e x表示第x个猫吃掉所有坚果,s x y表示第x个猫和第y个猫交换所有坚果,将k次操作重复进行m轮, ...
- POJ 3735 Training little cats<矩阵快速幂/稀疏矩阵的优化>
Training little cats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13488 Accepted: ...
随机推荐
- ssm多数据源配置
1.在.properties配置文件中 添加第二个数据源信息(type2,driver2, url2,username2,pawwword2) 2.修改spring-context.xml(src/m ...
- php 进行跨域操作
本地配置两个域名: http://www.concent.com 主域名 http://s.concent.com/ 子域名 在主域名下添加跨域代码: ini_set('session ...
- quart-process_bar
import asyncio import random import aioredis import redis from quart import Quart, request, url_for, ...
- Cassandra 原理介绍
Cassandra最初源自Facebook,结合了Google BigTable面向列的特性和[Amazon Dynamo](http://en.wikipedia.org/wiki/Dynamo(s ...
- nginx rewrite规则笔记
优先级 在nginx的location和配置中location的顺序没有太大关系.正location表达式的类型有关.相同类型的表达式,字符串长的会优先匹配. 第一优先级:等号类型(=)的优先级最高. ...
- mysql 利用druid 为访问密码加密
在原来数据库配置文件jdbc.properties 文件中增加几行加密文件 jdbc.username=rootjdbc.password=KqYkfcQkQOdOpCnaokLfb9Kbzdf+NG ...
- UiAutomator2.0 - 控件实现点击操作原理
目录 一.UiObject 二.UiObject2 穿梭各大技术博客网站,每天都能看到一些的新的技术.突然感觉UiAutomator 2.0相对于现在来说已经是个很久远的东西了ε=(´ο`*))).写 ...
- 模拟实现库函数的atoi、atof和itoa
1.函数atoi atoi (表示 alphanumeric to integer)是把字符串转换成整型数的一个函数.广泛的应用在计算机程序和办公软件中.atoi( ) 函数会扫描参数 nptr字符串 ...
- php框架rbac功能分析
四大php框架rbac功能分析对比
- DDD - 概述 - 聚合 - 限界上下文 (四)
最重要的一句话 DDD的所有有相关理论中,只有一句是至关重要的,但是也是最容易被忽略和最难做到的,抛弃传统的设计方式(思路)的思想,这句话起了决定性的作用,但是99%的人都忽略了或者在开始无法正视或理 ...