「Poj1845」Sumdiv 解题报告
题面戳这里
啥都别看,只是求
\(a^b\)所有的因数的和
思路:
真没想到!
其实我们可以先将\(a^b\)分解成质因数的
因为\(a^b\)的因数肯定是\(a^b\)的质因数在一定的条件下相乘而成的
然后组合一下
正解!!!
h^ovny:走开!别误导别人!
来一波公式:
\(a=\Pi^n_{i=1}p[i]^{c[i]}\)
\(a^b=\Pi^n_{i=1}p[i]^{c[i]*b}\)
所有因数的和:
\(Ans=\Pi_{i=1}^n\Sigma^{k[i]}_{j=0}p[i]^j\)
\(\Pi\) :读作Pi,是\(\pi\)的大写,表示累乘
\(\Sigma\) :读作Sigma,是\(\sigma\)的大写,表示累加
现在的问题就变成了如何求:
\(\Sigma_{j=0}^{k[i]}\)
展开来写乘:
\((1+p+p^2+p^3+…+p^k)\)
用分治法的思想求解
当k为奇数时:
\(f(k)=1+p+p^2+p^3+…+p^k\)
\(= (1+p+…+p^{\frac k 2})+(p^{\frac k 2+1}+…+p^k)\)
\(= (1+p+…+p^{\frac k 2})+p^{\frac k 2+1}*(1+p+…+p^{\frac k 2})\)
\(= (p^{\frac k 2+1}+1)*(1+p+…+p^{\frac k 2})\)
当k为偶数时
\(f(k)=f(k-1)*p^k\)
然后配合快速幂%9901
正解!!!
人已憔悴
Code:
#include<cstdio>
#include<iostream>
#define ll long long
#define Mod 9901
using namespace std;
ll a[30];
ll s[30];
bool b[10010];
ll n,m;
int t;
ll ans=1;
int read()
{
int s=0;
char c=getchar();
while(!isdigit(c))
c=getchar();
while(isdigit(c))
{
s=(s<<1)+(s<<3)+c-'0';
c=getchar();
}
return s;
}
ll quickPow(ll a,ll b)
{
ll res=1;
while(b>0)
{
if(b&1)
res=(res*a)%Mod;
b>>=1;
a=(a*a)%Mod;
}
return res;
}
ll work(ll p,ll k)
{
if(k==1)
return (p+1)%Mod;
if(k==0)
return 1;
if(k&1)
return work(p,k/2)*(quickPow(p,k/2+1)+1)%Mod;
return ((work(p,k/2-1)*(quickPow(p,k/2)+1))%Mod+quickPow(p,k))%Mod;
}
int main()
{
int i,j;
n=read();m=read();
if(n%2==0)
{
a[++t]=2;
while(n%2==0)
{
s[t]++;
n/=2;
}
}
for(i=3;i*i<=n;i+=2)
if(!b[i])
{
if(n%i==0)
{
a[++t]=i;
while(n%i==0)
{
s[t]++;
n/=i;
}
}
j=i+i;
while(j*j<=n)
{
b[j]=1;
j+=i;
}
}
if(n>1)
{
a[++t]=n;
s[t]=1;
}
for(i=1;i<=t;i++)
ans=(ans*work(a[i],s[i]*m))%Mod;
printf("%lld",ans);
return 0;
}
「Poj1845」Sumdiv 解题报告的更多相关文章
- 「ZJOI2016」旅行者 解题报告
「ZJOI2016」旅行者 对网格图进行分治. 每次从中间选一列,然后枚举每个这一列的格子作为起点跑最短路,进入子矩形时把询问划分一下,有点类似整体二分 至于复杂度么,我不会阿 Code: #incl ...
- 「HNOI2016」树 解题报告
「HNOI2016」树 事毒瘤题... 我一开始以为每次把大树的子树再接给大树,然后死活不知道咋做,心想怕不是个神仙题哦 然后看题解后才发现是把模板树的子树给大树,虽然思维上难度没啥了,但是还是很难写 ...
- 「HNOI2016」序列 解题报告
「HNOI2016」序列 有一些高妙的做法,懒得看 考虑莫队,考虑莫队咋移动区间 然后你在区间内部找一个最小值的位置,假设现在从右边加 最小值左边区间显然可以\(O(1)\),最小值右边的区间是断掉的 ...
- 「HNOI2016」网络 解题报告
「HNOI2016」网络 我有一个绝妙的可持久化树套树思路,可惜的是,它的空间是\(n\log^2 n\)的... 注意到对一个询问,我们可以二分答案 然后统计经过这个点大于当前答案的路径条数,如果这 ...
- 「HAOI2018」染色 解题报告
「HAOI2018」染色 是个套路题.. 考虑容斥 则恰好为\(k\)个颜色恰好为\(c\)次的贡献为 \[ \binom{m}{k}\sum_{i\ge k}(-1)^{i-k}\binom{m-k ...
- 「HNOI2016」最小公倍数 解题报告
「HNOI2016」最小公倍数 考虑暴力,对每个询问,处理出\(\le a,\le b\)的与询问点在一起的联通块,然后判断是否是一个联通块,且联通块\(a,b\)最大值是否满足要求. 然后很显然需要 ...
- 「SCOI2016」围棋 解题报告
「SCOI2016」围棋 打CF后困不拉基的,搞了一上午... 考虑直接状压棋子,然后发现会t 考虑我们需要上一行的状态本质上是某个位置为末尾是否可以匹配第一行的串 于是状态可以\(2^m\)压住了, ...
- 「SCOI2016」妖怪 解题报告
「SCOI2016」妖怪 玄妙...盲猜一个结论,然后过了,事后一证,然后假了,数据真水 首先要最小化 \[ \max_{i=1}^n (1+k)x_i+(1+\frac{1}{k})y_i \] \ ...
- 「SCOI2016」美味 解题报告
「SCOI2016」美味 状态极差无比,一个锤子题目而已 考虑每次对\(b\)和\(d\)求\(c=d \ xor \ (a+b)\)的最大值,因为异或每一位是独立的,所以我们可以尝试按位贪心. 如果 ...
随机推荐
- saltStack 状态模块(状态间的关系)
unless onlyif:状态间的条件判断,主要用于cmd状态模块 常用方法: onlyif:检查的命令,仅当'onlyif' 选项指向的命令返回true时才执行name 定义的命 unle ...
- Getting started with the basics of programming exercises_1
1.编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替 使用if 结构: #include<stdio.h> #define NONBLANK 'a'; // repal ...
- Python基础之(三)----PyGame安装步骤
http://blog.csdn.net/qq_33166080/article/details/68928563 如果你已经有一定的编程经验,那么学习一门新语言最快的方式就是拿着一个比较中型的项目, ...
- oracle总是使用索引的第一个列
如果索引是建立在多个列上, 只有在它的第一个列(leading column)被where子句引用时,优化器才会选择使用该索引. 译者按: 这也是一条简单而重要的规则. 见以下实例. SQL> ...
- Clipboard 自动复制功能,ios复制失败,换方案 user-select: text ;长按复制 (ios 兼容,长按复制)
Clipboard 自动复制功能,嵌套app内跳转的页面,ios 自动复制失败(该ios机子,微信,浏览器打开复制没有问题) 暂时换方案 user-select: text ;长按复制 (ios ...
- H3C 帧中继子接口
- H3C PPP显示与调试
- Python--day63--添加书籍
添加书籍的代码:
- css元素居中的几种方式
1.水平居中 <div style="width:200px;margin:0 auto;background-color: yellow;">水平居中</div ...
- springBoot中“MockMvc”的进行Controller进行单元测试:application/octet-stream' not supported问题小结
解决方案:这个问题其实是Content-type的问题,只需要在相关的代码加入相关Content-type中就可以了,代码如下: mockMvc.perform(post("/user&qu ...