链接:https://ac.nowcoder.com/acm/contest/330/E

来源:牛客网

题目描述

精通程序设计的 Applese 叕写了一个游戏。

在这个游戏中,有一个 n 行 m 列的方阵。现在它要为这个方阵涂上黑白两种颜色。规定左右相邻两格的颜色不能相同。请你帮它统计一下有多少种涂色的方法。由于答案很大,你需要将答案对 109+7109+7 取模。

输入描述:

仅一行两个正整数 n, m,表示方阵的大小。

输出描述:

输出一个正整数,表示方案数对 109+7109+7 取模。

示例1

输入

复制

1 1

输出

复制

2

示例2

输入

复制

2 2

输出

复制

4

备注:

1≤n,m≤10^100000

思路:思路很简单,就是2的n次方膜1e9+7,但是我们有个问题,就是数据的问题,10^100000,数据太大,我们就可以用欧拉降幂,基本板子题   欧拉降幂

代码:

#include <bits/stdc++.h>
#define ll long long int
#define mod 100000007
using namespace std;
char a[100005];
char b[100005];
ll x,z=mod;
ll quickpow(ll x,ll y,ll z)
{
ll ans=1;
while(y)
{
if(y&1)
ans=ans*x%z;
x=x*x%z;
y>>=1;
}
return ans;
}
ll phi(ll n)
{
ll i,rea=n;
for(i=2;i*i<=n;i++)
{
if(n%i==0)
{
rea=rea-rea/i;
while(n%i==0)
n/=i;
}
}
if(n>1)
rea=rea-rea/n;
return rea;
}
int main()
{
while(scanf("%s %s",a,b)!=EOF)
{
ll len=strlen(a);
ll p=phi(z);
ll ans=0;
for(ll i=0;i<len;i++)
ans=(ans*10+a[i]-'0')%p;
ans+=p;
printf("%lld\n",quickpow(2,ans,z));
}
return 0;
}

最新文章

  1. ruby
  2. Windows下USB磁盘开发系列二:枚举系统中所有USB设备
  3. 每天一个 Linux 命令(22):find 命令的参数详解
  4. Codeforces #380 div2 B(729B) Spotlights
  5. 【转】Web前端开发规范文档
  6. hdu 1262 寻找素数对 数论 打表。
  7. JAVA_SE基础——71.Random类制作随机验证码
  8. servlet学习总结
  9. Linux设备驱动之IIO子系统——IIO框架及IIO数据结构
  10. 论文阅读笔记二十四:Rich feature hierarchies for accurate object detection and semantic segmentation Tech report(R-CNN CVPR2014)
  11. vim 命令图解
  12. sip (db33)信令交互-视频点播与回播
  13. laravel注册行为的方法和逻辑
  14. 新手必看ES6基础
  15. Python标准库:内置函数abs(x)
  16. mac 类似Xshell
  17. .NET MVC Scripts.Render 上下文不存在问题解决方法
  18. iOS之某公司iOS开发笔试题
  19. [BZOJ1026][SCOI2009]windy数 解题报告|数位dp
  20. 微信公众平台:微信JS-SDK Demo

热门文章

  1. loop
  2. java中用正则表达式判断中文字符串中是否含有英文或者数字
  3. Win10_禁用自动更新(官方版)
  4. ubuntu16.04 安装opencv3.4
  5. 202. Happy Number 平方循环数
  6. 【摘自张宴的&quot;实战:Nginx&quot;】nginx配置
  7. VS2013中,将Qt的GUI程序改为控制台程序
  8. java全栈day06---数组的练习 冒泡排序
  9. meteor 命令文件shell 解析
  10. springcloud 通过后端去下载和预览文件,要重设跨域允许