洛谷P1593 因子和
题目描述
输入两个正整数a和b,求a^b的因子和。结果太大,只要输出它对9901的余数。
输入输出格式
输入格式:
仅一行,为两个正整数a和b(0≤a,b≤50000000)。
输出格式:
a^b的因子和对9901的余数。
输入输出样例
2 3
15
看似不可做,其实非常简单
任意正整数都有且只有一种方式写出其素因子的乘积表达式。
A=(p1^k1)*(p2^k2)*(p3^k3)*....*(pn^kn)
其中 pi 均为素数
那么A^B=(p1^(k1*B))*(p2^(k2*B))*(p3^(k3*B))*....*(pn^(kn*B))
显然ans=∑i1∑i2.....∑ik(p1^i1)*(p2^i2)*.....(pk^ik)
=∑i1(p1^i1)∑i2(p2^i2).....∑ik(pk^ik) 但是k*B最大可以达到30000×50000000(极限估算)
这里我们运用指数取模的方法,因为模数很小
根据费马小定理,我们证出:
a^x≡a^(x%μ(p)) (mod p) μ(p)=9900,p=9901
这样我们发现,∑i(p^i)其实存在长度为μ(p)的循环节
这样,就算k*B再大,我们也可以通过O(μ(p))的求和处理算出循环节
然后就可以直接算出∑i(p^i)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long lol;
lol A,B,pri[],cnt[],ans,pw[],tot;
int main()
{lol x,i,j;
cin>>A>>B;
x=A;
for (i=;i*i<=A;i++)
{
if (x%i==)
{
pri[++tot]=i;
while (x%i==)
{
cnt[tot]++;
x/=i;
}
}
}
if (x!=)
{
pri[++tot]=x;
cnt[tot]=;
}
for (i=;i<=tot;i++)
cnt[i]*=B;
ans=;
for (i=tot;i>=;i--)
{
pw[]=;
lol s=,as=;
for (j=;j<=&&j<=cnt[i];j++)
{
pw[j]=pw[j-]*pri[i]%;
s=(s+pw[j])%;
if (cnt[i]%==j)
as=s;
}
ans=(ans*((cnt[i]/)*s+as)%)%;
}
cout<<ans;
}
洛谷P1593 因子和的更多相关文章
- 洛谷 P1593 因子和
https://www.luogu.org/problemnew/show/P1593#sub 利用约数和定理:可以去看一下公式第13条 然后这个题目的话,要求$a^b$,那么我们首先可以先将a分解然 ...
- 洛谷 - P1593 - 因子和 - 费马小定理
类似的因为模数比较小的坑还有卢卡斯定理那道,也是有时候逆元会不存在,因为整除了.使用一些其他方法避免通过逆元. https://www.luogu.org/fe/problem/P1593 有坑.一定 ...
- 洛谷 P1593 因子和 || Sumdiv POJ - 1845
以下弃用 这是一道一样的题(poj1845)的数据 没错,所有宣称直接用逆元/快速幂+费马小定理可做的,都会被hack掉(包括大量题解及AC代码) 什么原因呢?只是因为此题的模数太小了...虽然990 ...
- 洛谷 P1593 因子和 题解
题面 这道题在数学方面没什么难度: 对于每一个正整数n: 质因数分解后可以写成n=a1^k1a2^k2……*ai^ki 所求的数的因数和f(n)就等于f(n)=(1+a1+a1^2+……+a1^k1) ...
- 洛谷P1244 青蛙过河 DP/思路
又是一道奇奇怪怪的DP(其实是思路题). 原文戳>>https://www.luogu.org/problem/show?pid=1244<< 这题的意思给的挺模糊,需要一定的 ...
- [洛谷P3158] [CQOI2011]放棋子
洛谷题目链接:[CQOI2011]放棋子 题目描述 在一个m行n列的棋盘里放一些彩色的棋子,使得每个格子最多放一个棋子,且不同 颜色的棋子不能在同一行或者同一列.有多少祌方法?例如,n=m=3,有两个 ...
- 洛谷P3938 斐波那契
题目戳 题目描述 小 C 养了一些很可爱的兔子. 有一天,小 C 突然发现兔子们都是严格按照伟大的数学家斐波那契提出的模型来进行 繁衍:一对兔子从出生后第二个月起,每个月刚开始的时候都会产下一对小兔子 ...
- 【洛谷2617_BZOJ1901】Dynamic Rankings(树套树)
题目: 洛谷 2617 BZOJ 1901 是权限题,\(n=10^4\) ,内存 128 MB :洛谷 2617 \(n=10^5\) ,内存 1024 MB ,数据比较坑. 分析: 蒟蒻初学树套树 ...
- 洛谷P1880 [NOI1995]石子合并 纪中21日c组T4 2119. 【2016-12-30普及组模拟】环状石子归并
洛谷P1880 石子合并 纪中2119. 环状石子归并 洛谷传送门 题目描述1 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石 ...
随机推荐
- 2018上C语言程序设计(高级)作业- 第1次作业
未来两周学习内容 复习指针的定义和引用 指针的应用场景: 指针作为函数参数(角色互换) 指针作为函数的参数返回多个值 指针.数组和地址间的关系 使用指针进行数组操作 数组名(指针)作为函数参数(冒泡排 ...
- C语言第零次作业总结
本次作业发现的亮点 没有发现抄袭的现象,大家都是独立且认真地完成这次的作业,希望再接再厉,继续保持 戴洁 陈欢 陈张鑫三位同学的博客写的不错,希望同学们向这三位同学学习,认真对待每次作业 本次作业的问 ...
- Mysql5.7.17中文乱码问题
写Java web调数据库,老是出现汉字乱码,一直没理睬,今天决定好好"整治"一下,却发现并没有那么简单.从网上找的方法,大部分都尝试了一遍都有一些问题. 有的改完了,数据库启动不 ...
- 201621123060《JAVA程序设计》第一周学习总结
1.本周学习总结 1.讲述了JAVA的发展史,关于JDK.JRE.JVM的联系和区别 2.JDK是用JAVA开发工具.做项目的关键.JRE是JAVA的运行环境(JAVA也是JAVA语言开发的).JVM ...
- Android实验报告
实验名称:Android程序设计 实验时间:2017.5.24 实验人员:20162309邢天岳(结对同学20162313苑洪铭) 实验目的:使用android stuidio开发工具进行基本安卓软件 ...
- loadrunner下载资源时步骤下载超时 (120 seconds) 已过期
下载资源所用时间超过120秒时,就会报出这个错误,解决方法是设置加大超时时间 运行时设置(快捷键F4) Internet 协议--首选项--高级--选项--General--步骤下载超时(秒) 可以把 ...
- SpringMVC 无法访问到指定jsp页面可能的原因
当出现你的程序可以访问到对应的controller层.但是却无法访问对应的jsp文件时.你首先做的不是检查web.xml等配置文件,而是打开的服务器根文件检查对应路径下的文件是否存在.命名是否正确.命 ...
- Three.js three.js Uncaught TypeError: Cannot read property 'getExtension' of null
在调试Three.js执行加载幕布的时候,突然爆出这个错误three.js Uncaught TypeError: Cannot read property 'getExtension' of nul ...
- Unity使用脚本进行批量动态加载贴图
先描述一下我正在做的这个项目,是跑酷类音游. 那么跑酷类音游在绘制跑道上的时候,就要考虑不同的砖块显示问题.假设我有了一个节奏列表,那么我们怎么将不同的贴图贴到不同的砖块上去呢? 我花了好几个小时才搞 ...
- Ubuntu server 16.04 中文版 终端不能显示中文的解决办法探讨
对于刚安装成功的Ubuntu server 16.04中文版,在终端显示中文的地方总是出现菱形的图标,看来该版本内置终端暂时不支持中文显示, 还是本人不知道具体操作配置,现通过百度查找以下几个解决方案 ...