Wannafly 模拟赛5 E 思维+数论
来源:互联网 发布:阿里云数据库实时备份 编辑:程序博客网 时间:2024/05/21 22:47
题目链接
参考博客(感谢)
用自己的语言简单总结一下…..加深理解。
题意:
Aria正面临算设课程的考试。
设
对于给定的n,m(其中n为质数),求F(
由于是算设课的考试,答案当然是对
思路:
首先此题需要基于一个重要的数论知识点:
对于一个数
int calc(int n,int m){ int ans = 0; while(n){ ans += n/m; n = n/m; } return ans;}
证明:
令
因为:
试着将因子m提出,则一定有:(C为一个不含因子m的数)
所以
另一部分则是
证毕。
记
因为
由上面的证明的数论知识,我们易得:
对于
故我们考虑将
对于
因为:
所以:
对于括号里面的第二项,可以视为一个子问题递归处理,即得:
快速幂+逆元即可。
代码:
#include<cstdio>#include<algorithm>#include<cstring>#include<queue>using namespace std;typedef long long ll;const ll mod = 1e9 + 7;ll fast_pow(ll n,ll m){ ll res = 1; while(m){ if(m&1) res = res*n%mod; n = n*n%mod; m >>= 1; } return res;}int main(){ ll n,m; scanf("%lld%lld",&n,&m); ll res = (fast_pow(n,m)-1)*fast_pow(n-1,mod-2)%mod; ll ans = (res + (fast_pow(n,m)*fast_pow(2,mod-2)%mod*(res-m)%mod))%mod; if(ans<0) ans += mod; printf("%lld\n",ans); return 0;}
阅读全文
0 0
- Wannafly 模拟赛5 E 思维+数论
- Wannafly模拟赛 树【思维+Dp】
- Wannafly模拟赛5 ASplit
- Wannafly模拟赛5 DAria
- 牛客网 Wannafly模拟赛2 树 dp+思维
- Wannafly模拟赛5 待更新 题解
- Wannafly模拟赛5 A split 二分
- Wannafly模拟赛5 A Split
- Wannafly模拟赛5 A Split 【贪心】
- Wannafly模拟赛5 F Course
- Wannafly模拟赛5 A题
- 10.9wannafly模拟赛
- Wannafly模拟赛4
- Wannafly模拟赛3
- Wannafly挑战赛6-E:双拆分数(思维)
- Wannafly挑战赛6 E双拆分数【思维】
- Wannafly模拟赛3 E 绝对半径2051【尺取】(可做模板)
- Wannafly模拟赛3 题解
- 比较数的大小
- Lua基础之元表(Metatable)
- Struts-json小知识
- oracle 分页
- JavaEE响应对象
- Wannafly 模拟赛5 E 思维+数论
- 阿里云买的服务器公网ip无法访问
- DOM(HTML中节点的获取)
- 实现一个函数,将一个字符串中的空格替换成“%20”。
- 使用xstream将xml转换成java对象
- 接口作为数据
- C++ 链表基本操作
- 为什么String是不可变对象
- 深度学习之卷积神经网络CNN及tensorflow代码实现示例