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