Applese 涂颜色(欧拉定理降幂+快速幂)
链接:https://ac.nowcoder.com/acm/contest/330/E
来源:牛客网
精通程序设计的 Applese 叕写了一个游戏。
在这个游戏中,有一个 n 行 m 列的方阵。现在它要为这个方阵涂上黑白两种颜色。规定左右相邻两格的颜色不能相同。请你帮它统计一下有多少种涂色的方法。由于答案很大,你需要将答案对
10
9
+
7
109+7 取模。
/*
这题容易发现规律,每一行有2种涂法(交叉式的涂),而跟有多少列没有关系。
所以ans = 2^n%mod;
由于n特别大,所以这题重点就是高精度的计算。
高精度的 幂并且取模运算 会想到用 欧拉定理降幂+快速幂。
对于欧拉定理,有个欧拉函数:
定义:
在数论中,对于一个正整数n,欧拉函数是 小于等于n 的正整数中 与n互质的数 的数目(φ(1)=1)。
关于欧拉函数与欧拉定理和费马小定理的关系:
欧拉定理的公式理解:
对于互质数a,m, a 的 m的欧拉值 次幂 对m取模 与 1对m取模 同余(三横这里是同余的意思)
费马小定理可以看成欧拉定理的一种特殊情况,即m为质数,对m取模时,m的欧拉值为m-1;
那么如何运用欧拉定理来降幂呢?
我们用欧拉定理的特殊情况费马小定理来举例:
2^100 % 7 = (2^(6*16)) * (2^4) % 7 =(1^16) * (2^4) % 7 = 2;
同样上面那个例子套入降幂公式:
A = 2;
B =100;
C = 7;
2^100 % 7 = 2^(100%φ(7)+ φ(7)) % 7;
φ(7) = 6;
2^100 % 7 = 2^(100%6+ 6) % 7 = 2^(4+6) % 7 = 2^4 % 7 * 2^6 % 7 = 16%7*1 = 2;
与测试结果一致:
/
/
解题:
由于mod = 1e9 + 7,
是一个质数,所以对于本题来说可以直接用费马小定理+快速幂
或者不管mod是不是质数(没有考虑到mod是不是质数),用欧拉定理+快速幂;
幂指数n十分十分大,用前先结合同余定理处理
*/
ac_code(费马+快速幂):
#include <iostream>
#include <string>
#define ll long long
const ll mod = 1e9+7;
using namespace std;
ll quickPow(ll a,ll b)
{ll ans = 1;a %= mod;while(b){if(b&1) ans = (ans * a) % mod;a = a * a % mod;b >>= 1;}return ans;
}
int main()
{string s1,s2;while(cin>>s1>>s2){ll length = s1.size(),n = 0,p;p = mod - 1;for(int i = 0; i < length; i++){n =(n * 10 + (s1[i] - '0')) % p;}cout<<quickPow(2,n)<<endl;}return 0;
}
ac_code(欧拉+快速幂):
#include <iostream>
#include <string>
#define ll long long
const ll mod = 1e9+7;
using namespace std;
ll quickPow(ll a,ll b)
{ll ans = 1;a %= mod;while(b){if(b&1) ans = (ans * a) % mod;a = a * a % mod;b >>= 1;}return ans;
}
ll euler(ll n)
{ll res = n;for(int i = 2; i*i <= n; i++){if(n % i == 0)res = res / i * (i-1);while(n%i==0)n /= i;}if(n > 1)res = res / n * (n-1);return res;
}
int main()
{string s1,s2;while(cin>>s1>>s2){ll length = s1.size(),n = 0,p;//p = mod - 1;p = euler(mod);for(int i = 0; i < length; i++){n =(n * 10 + (s1[i] - '0')) % p;}cout<<quickPow(2,n)<<endl;}return 0;
}
Applese 涂颜色(欧拉定理降幂+快速幂)相关推荐
- 牛客训练四:Applese 涂颜色(费马小定理+快速幂)
题目链接:传送门 思路: 考虑每一列有2种颜色,总共有n行,每一行的第一个格确定颜色,由于左右颜色不相同,后面的行就确定了. 所以总共有2^n中结果. 由于n太大,所以要用到费马小定理a^n%mod= ...
- Applese 涂颜色
https://ac.nowcoder.com/acm/contest/330/E Python版本一 题解: std 一个比较显然的结论是,对于每一列,有 2n 种涂色方法. 我们可以发现,当确定了 ...
- 欧拉定理、快速幂与逆元
Color the necklace 时间限制:2000 ms | 内存限制:65535 KB 难度:0 描述 As we all know, girls love necklaces, espe ...
- 【牛客 -330E 】Applese 涂颜色(费马小定理,超级快速幂)
题干: 精通程序设计的 Applese 叕写了一个游戏. 在这个游戏中,有一个 n 行 m 列的方阵.现在它要为这个方阵涂上黑白两种颜色.规定左右相邻两格的颜色不能相同.请你帮它统计一下有多少种涂色的 ...
- Applese 涂颜色(欧拉降幂)
链接:https://ac.nowcoder.com/acm/contest/330/E 来源:牛客网 题目描述 精通程序设计的 Applese 叕写了一个游戏. 在这个游戏中,有一个 n 行 m 列 ...
- HDU 4365 正方形格子涂色中心对称轴对称的涂法有多少种-思维-(矩阵坐标关系快速幂取模)
题意:n*n的格子,涂色,有k种颜料,必须满足旋转任意个90度和翻转之后图片的样子不变,现在已经有m个格子涂过色了,问还有多少种涂法满足上述条件. 分析: 满足上述对称条件,那么涂色的种类问题我们可以 ...
- qduoj LC的涂色游戏(快速幂)
题目链接:https://qduoj.com/problem/12/点击打开链接 LC的涂色游戏 发布时间: 2015年9月19日 21:42 时间限制: 1000ms 内存限制: 256M ...
- [CSP-S模拟测试]:涂色游戏(DP+组合数+矩阵快速幂)
题目描述 小$A$和小$B$在做游戏. 他们找到了一个$n$行$m$列呈网格状的画板.小$A$拿出了$p$支不同颜色的画笔,开始在上面涂色.看到小$A$涂好的画板,小$B$觉得颜色太单调了,于是把画板 ...
- 【noip2016十连测round3】T3 涂色游戏 【矩阵快速幂优化dp】
涂色游戏 题解: 推一推公式. 我们让f[i][j]表示第i列有j种颜色的方案总数,k表示i-1列用了多少种颜色,l表示第i列用了多少种没有在i-1列出现的颜色,G(i,j)表示i个格子涂j种颜色的方 ...
最新文章
- oracle插入表为文件,将文本文件插入Oracle表中
- Java Set集合详解及Set与List的区别
- js中对String去空格
- iOS 10 之后权限设置
- leetcode 112 --- 二叉树根节点到叶子节点和为指定值的路径
- yum 找不到程序,yum更换国内阿里源
- SQLite事务与自增深度分析
- Linux基础知识(3)---查看linux系统重启之前的log -- last_kmsg
- session登录状态保持html,Flask使用Session和上下文处理器保持登录状态
- arma模型matlab代码_DCC GARCH模型
- 基于java web的房屋出租管理系统-学生毕业设计
- Macbook 修改照片的大小
- 关于matlab中的gcf,gca
- 2D卷积和3D卷积的区别及pytorch实现
- 中国六大最忙和六大最懒城市
- 百万级数据量,千万级数据量是多少,海量数据的优化方案
- 【华为OD机试真题 Python】统计射击比赛成绩
- 计算机网络与新媒体就业前景,2018网络与新媒体专业就业前景和就业方向分析...
- Graphite 简介
- Error response from daemon: Get “https://xxx.xxx.com/xxx/“: unauthorized:
热门文章
- springboot教程(一)
- 这个只有1.5M的软件,能让你的网速快3倍
- 最全的 pip 使用指南,50% 你可能没用过。
- 百度之下,你绝对猜不到的国内第二大搜索引擎
- python中可选参数的特征_sklearn特征选择方法及参数
- dll 源码_重新编译mono——Android动态更新dll
- 计算机中丢失无法开机密码,电脑由于忘记开机密码,现拔出了主板电池,。结果开不了机,怎么办?急 按开机键,一点反应都没...
- linux给oracle导入sql语句,Linux数据库创建与数据导入
- leetcode-237-删除链表中的节点
- The Preliminary Contest for ICPC Asia Nanjing 2019ICPC南京网络赛