luogu P1593 因子和
不要吐槽博主总做这些数论氵题
首先我们看到这种因数问题,果断质因数分解
所以当前数\(a=p_1^{k_1}*p_2^{k_2}...*p_m^{k_m}\)
可得\(a^b=p_1^{k_1*b}*p_2^{k_2*b}...*p_m^{k_m*b}\)
考虑因数和,假设数\(a\)只有一个质因子\(p_1\),则因数和为\(\sum_{i=0}^{k_1}{p_1}^i\)
如果有第二个质因子\(p_2\)则因数和为\(\sum_{i=0}^{k_1}({p_1}^i*\sum_{j=0}^{k_2}{p_2}^j)=(\sum_{i=0}^{k_1}{p_1}^i)*(\sum_{j=0}^{k_2}{p_2}^j)\)
以此类推,我们要求的因数之和显然为\(\prod_{i=1}^m \sum_{j=0}^{k_i}{p_i}^j\)
至于后面那一段怎么求,先令\(f_i=\sum_{j=0}^{i}p^j\)
可以发现\(f_{i+1}=\sum_{j=0}^{i+1}p^j=p*(\sum_{j=0}^{i}p^j)+1=p*f_i+1\)
然后就可以偷税的使用矩乘了(如果不会请参考这题)
代码如下
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
#include<ctime>
#include<queue>
#include<map>
#define LL long long
#define il inline
#define re register
using namespace std;
const LL mod=9901;
il LL rd()
{
re LL x=0,w=1;re char ch;
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
struct mrtx
{
LL a[2][2];
mrtx(){memset(a,0,sizeof(a));}
}a,b;
il mrtx mlt(mrtx a,mrtx b)
{
mrtx c;
for(int i=0;i<=1;i++)
for(int j=0;j<=1;j++)
for(int k=0;k<=1;k++)
c.a[i][j]=(c.a[i][j]+(a.a[i][k]*b.a[k][j])%mod)%mod;
return c;
}
il mrtx ksm(mrtx a,mrtx b,LL bb) //这里直接把转移矩阵乘到初始矩阵上去
{
while(bb)
{
if(bb&1) a=mlt(a,b);
b=mlt(b,b);
bb>>=1;
}
return a;
}
LL p[20][2],tt,n,m,ans=1;
int main()
{
n=rd(),m=rd();
int srt=sqrt(n);
for(int i=2;i<=srt;i++)
{
if(n%i!=0) continue;
p[++tt][0]=i;
while(n%i==0) ++p[tt][1],n/=i;
}
if(n>1) p[++tt][0]=n,p[tt][1]=1;
a.a[0][0]=a.a[0][1]=1,b.a[1][0]=b.a[1][1]=1;
for(int i=1;i<=tt;i++)
{
p[i][1]*=m;
b.a[0][0]=p[i][0];
ans=(ans*ksm(a,b,p[i][1]).a[0][0])%mod;
}
printf("%lld\n",ans);
return 0;
}
luogu P1593 因子和的更多相关文章
- 洛谷 P1593 因子和
https://www.luogu.org/problemnew/show/P1593#sub 利用约数和定理:可以去看一下公式第13条 然后这个题目的话,要求$a^b$,那么我们首先可以先将a分解然 ...
- 洛谷P1593 因子和
题目描述 输入两个正整数a和b,求a^b的因子和.结果太大,只要输出它对9901的余数. 输入输出格式 输入格式: 仅一行,为两个正整数a和b(0≤a,b≤50000000). 输出格式: a^b的因 ...
- P1593 因子和
P1593 因子和新算法:#define ni 逆元先质因数分解,(1+p1^1+p1^2...p1^x)*(1+p2^1+p2^2...p2^x)然后套等比数列公式就可以了. #include< ...
- luogu 1593 因子和
因子和 题目描述 输入两个正整数a和b,求\(a^b\)的因子和.结果太大,只要输出它对9901的余数. 解法 基本算数定理,每一个数都可以被分解成一系列的素数的乘积,然后你可以分解出因数了. 如何求 ...
- 【Luogu】P1593因子和(唯一分解定理,约数和公式)
题目链接 首先介绍两个定理. 整数唯一分解定理:任意正整数都有且只有一种方式写出素数因子的乘积表达式. \(A=(p1k1 p2k2 ...... pnkn \) 求这些因子的代码如下 ;i*i< ...
- 洛谷 - P1593 - 因子和 - 费马小定理
类似的因为模数比较小的坑还有卢卡斯定理那道,也是有时候逆元会不存在,因为整除了.使用一些其他方法避免通过逆元. https://www.luogu.org/fe/problem/P1593 有坑.一定 ...
- luogu P3226 [HNOI2012]集合选数
luogu 因为限制关系只和2和3有关,如果把数中2的因子和3的因子都除掉,那剩下的数不同的数是不会相互影响,所以每次考虑剩下的数一样的一类数,答案为每类数答案的乘积 如果选了一个数,那么2的因子多1 ...
- [luogu]P3938 斐波那契[数学]
[luogu]P3938 斐波那契 题目描述 小 C 养了一些很可爱的兔子. 有一天,小 C 突然发现兔子们都是严格按照伟大的数学家斐波那契提出的模型来进行 繁衍:一对兔子从出生后第二个月起,每个月刚 ...
- [luogu]P3939 数颜色[二分]
[luogu]P3939 数颜色 题目描述 小 C 的兔子不是雪白的,而是五彩缤纷的.每只兔子都有一种颜色,不同的兔子可能有 相同的颜色.小 C 把她标号从 1 到 n 的 n 只兔子排成长长的一排, ...
随机推荐
- Lodop打印语句最基本结构介绍(什么是一个任务)
Lodop中最基本的打印过程至少有初始化语句.添内容语句和打印语句三部分组成,例如: LODOP.PRINT_INIT("打印任务名"); //首先一个初始化语句 LODOP.AD ...
- 【gridview增删改查】数据库查询后lodop打印
ASP.NET中使用gridview可以很容易的把需要的数据动态显示在前台,还可以在表格里加入列进行增删改查,每次点击的时候重新加载数据,gridview也提供了分页等功能,还有一些模版让显示在前台的 ...
- 10 月 30 日新款 Mac mini 有望与新款 iPad Pro 一起发布
苹果最新款的 Mac mini 是在 2014 年 10 月推出的版本,到现在已经过了 4 年.分析师郭明錤和彭博社的 Mark Gurman 都表示苹果会在今年晚些时候发布新款 Mac mini. ...
- 构建squid代理服务器
基本概念 本文使用squid代理服务 软件介绍:百度百科 作为应用层的代理服务软件,Squid主要提供缓存加速.应用层过滤控制的功能: 工作机制:缓存网页对象,减少重复请求(HTTP代理的缓存加速对象 ...
- BZOJ4764弹飞大爷——LCT
题目描述 自从WC退役以来,大爷是越来越懒惰了.为了帮助他活动筋骨,也是受到了弹飞绵羊一题的启发,机房的小伙伴们 决定齐心合力构造一个下面这样的序列.这个序列共有N项,每项都代表了一个小伙伴的力量值, ...
- BZOJ3585&3339mex——主席树
题目描述 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. 输入 第一行n,m.第二行为n个数.从第三行开始,每行一个询问l,r. 输出 一行一个 ...
- First Knight UVALive - 4297(优化高斯消元解概率dp)
题意: 一个矩形区域被分成 m*n 个单元编号为 (1, 1)至 (m, n),左上为 (1, 1),右下为(m, n).给出P(k)i,j,其中 1 ≤ i ≤ m,1 ≤ j ≤ n,1 ≤ k ...
- 画删除线的方法,如何找替代方法,Deprecated注释
用@Deprecated注释的程序元素,不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择.在使用不被赞成的程序元素或在不被赞成的代码中执行重写时,编译器会发出警告. 那么相应的替代方法应 ...
- 【题解】 bzoj3894: 文理分科 (网络流/最小割)
bzoj3894,懒得复制题面,戳我戳我 Solution: 首先这是一个网络流,应该还比较好想,主要就是考虑建图了. 我们来分析下题面,因为一个人要么选文科要么选理科,相当于两条流里面割掉一条(怎么 ...
- 【AGC016E】Poor Turkeys
Description 有\(n\)(\(1 \le n \le 400\))只鸡,接下来按顺序进行\(m\)(\(1 \le m \le 10^5\))次操作.每次操作涉及两只鸡,如果都存在则随意拿 ...