链接: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 涂颜色(欧拉定理降幂+快速幂)相关推荐

  1. 牛客训练四:Applese 涂颜色(费马小定理+快速幂)

    题目链接:传送门 思路: 考虑每一列有2种颜色,总共有n行,每一行的第一个格确定颜色,由于左右颜色不相同,后面的行就确定了. 所以总共有2^n中结果. 由于n太大,所以要用到费马小定理a^n%mod= ...

  2. Applese 涂颜色

    https://ac.nowcoder.com/acm/contest/330/E Python版本一 题解: std 一个比较显然的结论是,对于每一列,有 2n 种涂色方法. 我们可以发现,当确定了 ...

  3. 欧拉定理、快速幂与逆元

    Color the necklace 时间限制:2000 ms  |  内存限制:65535 KB 难度:0 描述 As we all know, girls love necklaces, espe ...

  4. 【牛客 -330E 】Applese 涂颜色(费马小定理,超级快速幂)

    题干: 精通程序设计的 Applese 叕写了一个游戏. 在这个游戏中,有一个 n 行 m 列的方阵.现在它要为这个方阵涂上黑白两种颜色.规定左右相邻两格的颜色不能相同.请你帮它统计一下有多少种涂色的 ...

  5. Applese 涂颜色(欧拉降幂)

    链接:https://ac.nowcoder.com/acm/contest/330/E 来源:牛客网 题目描述 精通程序设计的 Applese 叕写了一个游戏. 在这个游戏中,有一个 n 行 m 列 ...

  6. HDU 4365 正方形格子涂色中心对称轴对称的涂法有多少种-思维-(矩阵坐标关系快速幂取模)

    题意:n*n的格子,涂色,有k种颜料,必须满足旋转任意个90度和翻转之后图片的样子不变,现在已经有m个格子涂过色了,问还有多少种涂法满足上述条件. 分析: 满足上述对称条件,那么涂色的种类问题我们可以 ...

  7. qduoj LC的涂色游戏(快速幂)

    题目链接:https://qduoj.com/problem/12/点击打开链接 LC的涂色游戏 发布时间: 2015年9月19日 21:42   时间限制: 1000ms   内存限制: 256M ...

  8. [CSP-S模拟测试]:涂色游戏(DP+组合数+矩阵快速幂)

    题目描述 小$A$和小$B$在做游戏. 他们找到了一个$n$行$m$列呈网格状的画板.小$A$拿出了$p$支不同颜色的画笔,开始在上面涂色.看到小$A$涂好的画板,小$B$觉得颜色太单调了,于是把画板 ...

  9. 【noip2016十连测round3】T3 涂色游戏 【矩阵快速幂优化dp】

    涂色游戏 题解: 推一推公式. 我们让f[i][j]表示第i列有j种颜色的方案总数,k表示i-1列用了多少种颜色,l表示第i列用了多少种没有在i-1列出现的颜色,G(i,j)表示i个格子涂j种颜色的方 ...

最新文章

  1. oracle插入表为文件,将文本文件插入Oracle表中
  2. Java Set集合详解及Set与List的区别
  3. js中对String去空格
  4. iOS 10 之后权限设置
  5. leetcode 112 --- 二叉树根节点到叶子节点和为指定值的路径
  6. yum 找不到程序,yum更换国内阿里源
  7. SQLite事务与自增深度分析
  8. Linux基础知识(3)---查看linux系统重启之前的log -- last_kmsg
  9. session登录状态保持html,Flask使用Session和上下文处理器保持登录状态
  10. arma模型matlab代码_DCC GARCH模型
  11. 基于java web的房屋出租管理系统-学生毕业设计
  12. Macbook 修改照片的大小
  13. 关于matlab中的gcf,gca
  14. 2D卷积和3D卷积的区别及pytorch实现
  15. 中国六大最忙和六大最懒城市
  16. 百万级数据量,千万级数据量是多少,海量数据的优化方案
  17. 【华为OD机试真题 Python】统计射击比赛成绩
  18. 计算机网络与新媒体就业前景,2018网络与新媒体专业就业前景和就业方向分析...
  19. Graphite 简介
  20. Error response from daemon: Get “https://xxx.xxx.com/xxx/“: unauthorized:

热门文章

  1. springboot教程(一)
  2. 这个只有1.5M的软件,能让你的网速快3倍
  3. 最全的 pip 使用指南,50% 你可能没用过。
  4. 百度之下,你绝对猜不到的国内第二大搜索引擎
  5. python中可选参数的特征_sklearn特征选择方法及参数
  6. dll 源码_重新编译mono——Android动态更新dll
  7. 计算机中丢失无法开机密码,电脑由于忘记开机密码,现拔出了主板电池,。结果开不了机,怎么办?急 按开机键,一点反应都没...
  8. linux给oracle导入sql语句,Linux数据库创建与数据导入
  9. leetcode-237-删除链表中的节点
  10. The Preliminary Contest for ICPC Asia Nanjing 2019ICPC南京网络赛