「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)\)的最大值,因为异或每一位是独立的,所以我们可以尝试按位贪心. 如果 ...
随机推荐
- mysql数据库之windows版本
安装 第一步:打开网址,http://www.mysql.com.点击downloads之后跳转到http://www.mysql.com/downloads/选择Community选项 第二步:按 ...
- EC Round 33 F. Subtree Minimum Query 主席树/线段树合并
这题非常好!!! 主席树版本 很简单的题目,给一个按照指定节点的树,树上有点权,你需要回答给定节点的子树中,和其距离不超过k的节点中,权值最小的. 肯定首先一想,按照dfs序列建树,然后按照深度为下标 ...
- 【tensorflow】】模型优化(一)指数衰减学习率
指数衰减学习率是先使用较大的学习率来快速得到一个较优的解,然后随着迭代的继续,逐步减小学习率,使得模型在训练后期更加稳定.在训练神经网络时,需要设置学习率(learning rate)控制参数的更新速 ...
- Activiti6-快速开始
下载 https://www.activiti.org/download-links 快速开始 https://www.activiti.org/quick-start 用户指南 https://ww ...
- 自动为DEV GridView控件添加SizeChanged事件
实现gdv设置的抽象对象,不用每个gdv控件都添加sizechanged事件,只需执行gdc绑定sql函数,在其中会自动添加SizeChanged事件. //2016.5.13 by sngk //根 ...
- H3C 帧中继协议特点
- dotnet 设计规范 · 数组定义
本文告诉大家数组定义需要知道的规范,本文翻译 docs dotnet ✓ 建议在公开的 API 使用集合而不是数组.集合可以提供更多的信息. X 不建议设置数组类型的字段为只读.虽然用户不能修改字段, ...
- java面向接口编程之制定标准和简单工厂模式
制定一个标准,让别人去实现或者说满足它! Eg: interface USB{//定义USB标准 void useUSB();//USB有使用USB的行为 } 简单工厂模式 构建一个工厂出来,在里面进 ...
- 初次使用pycharm 的interpreter option为空解决办法。
第一步:进入Setting. 第二步:进入Project中的Project Interpreter.选择添加即可.
- P1072 城市轰炸
题目描述 一个大小为N*M的城市遭到了X次轰炸,每次都炸了一个每条边都与边界平行的矩形. 在轰炸后,有Y个关键点,指挥官想知道,它们有没有受到过轰炸,如果有,被炸了几次,最后一次是第几轮. 输入格式 ...