题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3240

n 和 m 太过巨大,不难想到应该用费马小定理什么的来缩小范围;

总之就是推式子啦,看博客:https://blog.csdn.net/jiangshibiao/article/details/24594825

还有:https://www.cnblogs.com/iiyiyi/p/5617598.html

其实也蛮好推的,也挺好写,但我调了很久很久啊...

要十分注意取 mod 时候加括号的艺术...

还要注意指数里的 n 或 m 取的是 mod-1 的模,就是费马小定理。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
int const maxl=1e6+;
ll a,b,c,d,mod=1e9+,A,B,tmp;
char nn[maxl],mm[maxl];
struct N{ll ord,uni;}n,m;
void get()
{
int l=strlen(nn);
// for(int i=l-1;i>=0;i--)//傻了
for(int i=;i<l;i++)
{
n.ord=(n.ord*%mod+nn[i]-'')%mod;//a=1
n.uni=(n.uni*%(mod-)+nn[i]-'')%(mod-);//a!=1
}
l=strlen(mm);
// for(int i=l-1;i>=0;i--)
for(int i=;i<l;i++)
{
m.ord=(m.ord*%mod+mm[i]-'')%mod;//a=1
m.uni=(m.uni*%(mod-)+mm[i]-'')%(mod-);//a!=1
}
}
ll pw(ll a,ll b)
{
ll ret=;
for(;b;b>>=1ll,(a*=a)%=mod)
if(b&) (ret*=a)%=mod;
return ret;
}
ll ni(ll x){return pw(x,mod-);}
int main()
{
scanf("%s%s",&nn,&mm);
scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
get();
if(a==)
{
B=(((c*b)%mod*(m.ord-))%mod+d)%mod;
if(c==)tmp=(+n.ord*B)%mod;
else tmp=(pw(c,n.uni)+((B*(pw(c,n.uni)-)%mod)*ni(c-))%mod)%mod;//注意指数部分是uni而非ord!!!
}
else
{
A=(pw(a,m.uni-)*c)%mod;
B=(((((pw(a,m.uni-)-)*ni(a-))%mod*c)%mod*b)%mod+d)%mod;
tmp=(pw(A,n.uni)+(((pw(A,n.uni)-)*ni(A-))%mod*B)%mod)%mod;
}
printf("%lld",((tmp-d)*ni(c)%mod+mod)%mod);//+mod %mod
return ;
}

bzoj3240 [Noi2013]矩阵游戏——费马小定理+推式子的更多相关文章

  1. BZOJ 3240([Noi2013]矩阵游戏-费马小定理【矩阵推论】-%*s-快速读入)

    3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec   Memory Limit: 256 MB Submit: 123   Solved: 73 [ Submit][ St ...

  2. BZOJ 3240 [Noi2013]矩阵游戏 ——费马小定理 快速幂

    发现是一个快速幂,然而过不去. 怎么办呢? 1.十进制快速幂,可以用来练习卡时. 2.费马小定理,如果需要乘方的地方,可以先%(p-1)再计算,其他地方需要%p,所以需要保存两个数. 然后就是分类讨论 ...

  3. M斐波那契数列(矩阵快速幂+费马小定理)

    M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Sub ...

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

    M斐波那契数列 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submi ...

  5. HDOJ 4549 M斐波那契数列 费马小定理+矩阵高速幂

    MF( i ) = a ^ fib( i-1 ) * b ^ fib ( i )   ( i>=3) mod 1000000007 是质数 , 依据费马小定理  a^phi( p ) = 1 ( ...

  6. HDU 4549 (费马小定理+矩阵快速幂+二分快速幂)

    M斐波那契数列 Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Statu ...

  7. HDU4549 M斐波那契数列 —— 斐波那契、费马小定理、矩阵快速幂

    题目链接:https://vjudge.net/problem/HDU-4549 M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Li ...

  8. HDU 5667 Sequence 矩阵快速幂+费马小定理

    题目不难懂.式子是一个递推式,并且不难发现f[n]都是a的整数次幂.(f[1]=a0;f[2]=ab;f[3]=ab*f[2]c*f[1]...) 我们先只看指数部分,设h[n]. 则 h[1]=0; ...

  9. [HDOJ5667]Sequence(矩阵快速幂,费马小定理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5667 费马小定理: 假如p是质数,且gcd(a,p)=1,那么 a^(p-1)≡1(mod p). 即 ...

随机推荐

  1. Script:shell脚本生成随机字符串

    #!/bin/bash # bash generate random alphanumeric string # # bash generate random character alphanumer ...

  2. CCF201509-2 日期计算 java(100分)

    试题编号: 201509-2 试题名称: 日期计算 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定一个年份y和一个整数d,问这一年的第d天是几月几日? 注意闰年的2月有2 ...

  3. sprintf用法

    函数简介 函数功能:把格式化的数据写入某个字符串 头文件:stdio.h 函数原型:int sprintf( char *buffer, const char *format [, argument] ...

  4. visioStudio常见问题

    问题一: 在做项目时候,使用VisioStudio 2008,一不小心将设置恢复到了原始,一直找不到需要的东西. 比如生成方式“debug”和“Release”选择框没有.一些图标也没有. 经过不断的 ...

  5. Springboot源码分析

    参考资料 https://www.cnblogs.com/lizongshen/p/9127999.html

  6. log 框架 之间的关系

    日志框架分为两大部分 一部分是日志框架的抽象层,一部分是日志框架的具体实现 slf4j: 日志框架的抽象层 log4j,logback 日志框架的具体实现 如上图所示: slf4j的具体实现是:slf ...

  7. Spring Security核心类关系图

    以有限的脑力记忆无限的Knowledge,多画图,多画图,多画图. 核心类Authentication 和 GrantedAuthority AbstractAuthenticationToken 由 ...

  8. 【03】WAMPServer集成环境下载和安装

    WAMPServer集成环境下载和安装1.W:windows,A:Apache,M:MySQL,P:PHP2.下载WAMP开发包网址:www.wampserver.com           3.安装 ...

  9. 抽象类和接口有什么区别---https://blog.csdn.net/csdn_aiyang/article/details/71171886

    https://blog.csdn.net/csdn_aiyang/article/details/71171886 概念]   抽象类.具体类是相对的,并非绝对的.抽象是一种概念性名词,具体是一种可 ...

  10. Leetcode 89.格雷编码

    格雷编码 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异. 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列.格雷编码序列必须以 0 开头. 示例 1: 输入: 2 ...