博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LightOJ - 1050 (唯一分解+推公式+乘法逆元)
阅读量:5095 次
发布时间:2019-06-13

本文共 1399 字,大约阅读时间需要 4 分钟。

题意:求a^b的所有约数和对1e9+7取模的结果

思路:对于一个数p,进行唯一分解,则p=P1^M1*P2^M2*...*Pn^Mn,则p的所有约数之和等于(P1^0+P1^1+...+P1^M1)*(P2^0+P2^1+...+P2^M2)*...*(Pn^0+Pn^1+...+Pn^Mn),

p^t=P1^(M1*t)*P2^(M2*t)*...*Pn^(Mn*t),每一个(Pn^0+Pn^1+...+Pn^Mn)利用等比数列可以直接推出公式为(Pn^(Mn*t+1)-1)/(Pn-1),用快速幂和乘法逆元即可。

注意:n的唯一分解只需要试遍sqrt(n)的所有质数即可,若最后n除不尽,那么最后的n一定是质数。

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 #include
15 #include
16 #define x first 17 #define y second 18 #define pb push_back 19 #define mp make_pair 20 #define lson l,m,rt*2 21 #define rson m+1,r,rt*2+1 22 #define mt(A,B) memset(A,B,sizeof(A)) 23 using namespace std; 24 typedef long long LL; 25 const double PI = acos(-1); 26 const int N=1e5+10; 27 const LL mod=1e9+7; 28 const int inf = 0x3f3f3f3f; 29 const LL INF=0x3f3f3f3f3f3f3f3fLL; 30 vector
prime; 31 int vis[N]; 32 void init() 33 { 34 mt(vis,0); 35 LL m=sqrt(N+0.5); 36 for(LL i=2;i<=m;i++) 37 { 38 if(!vis[i])for(LL j=i*i;j<=N;j+=i)vis[j]++; 39 } 40 for(LL i=2;i
>T; 82 for(int d=1;d<=T;d++) 83 { 84 cout<<"Case "<
<<":"<<" "; 85 ans=1; 86 cin>>n>>m; 87 for(int i=0;i
1)ans=(ans*solve(n,(LL)(m+1)))%mod;102 cout<
<
View Code

 

转载于:https://www.cnblogs.com/27sx/p/6417897.html

你可能感兴趣的文章
快速幂
查看>>
改善C#公共程序类库质量的10种方法
查看>>
AIO 开始不定时的抛异常: java.io.IOException: 指定的网络名不再可用
查看>>
MyBaits动态sql语句
查看>>
HDU4405(期望DP)
查看>>
拉格朗日乘子法 那些年学过的高数
查看>>
vs code 的便捷使用
查看>>
Spring MVC @ResponseBody返回中文字符串乱码问题
查看>>
用户空间与内核空间,进程上下文与中断上下文[总结]
查看>>
JS 中的跨域请求
查看>>
JAVA开发环境搭建
查看>>
mysql基础语句
查看>>
Oracle中的rownum不能使用大于>的问题
查看>>
[Data Structure & Algorithm] 有向无环图的拓扑排序及关键路径
查看>>
git 常用命令
查看>>
cassandra vs mongo (1)存储引擎
查看>>
Visual Studio基于CMake配置opencv1.0.0、opencv2.2
查看>>
Vue音乐项目笔记(三)
查看>>
遍历Map对象
查看>>
计算剪贴板里仿制的代码行数
查看>>