题目 poj的1845

分解a的质因数a=p1^t1*p2^t1........

每个质因数对sum的贡献: 当除去质因数p1时的因数和为sum,当计入p1时,因子和变成sum*p1^0+sum*p1^1+sum*p1^2......+sum*p1^t1

也就是所有的sum=【1+p1+p1^2+p1^3+...+p1^t1】*【p2.....】【p3...】

然后由于是a^b,所以最后是

sum=sum=【1+p1+p1^2+p1^3+...+p1^(t1*b)】*【p2.....】【p3...】

显然就是求关于a的所有质因数的一个 等比数列之和前n项和.

用逆元,用公比求和公式  1+pi+...+pi^n=(pi^(n+1)-1)/(pi-1)
  由于涉及到除法,且mod=9901为素数,所以可以用费马小定理求逆元,只是要注意mod比较小,
当【prim[i]-1】%mod==0(分母是mod的倍数)时,逆元不存在,不过此时恰好公比为1啦,前n项和答案就是n
代码如下 :

 int pime[];
int s[];
int cnt=;
void init(ll n)//这个函数很巧妙 可以不打表找素数
{
for(ll i=;i*i<=n;i++)
{
if(n%i==)//如果n能被i正除,i就是素数,自己好好想一想,为什么
{
pime[++cnt]=i;//是素数用数组记录下来
while(n%i==)//然后找该素数有几个
{
n/=i;
s[cnt]++;//符合条件的第cnt个素数累加
}
}
}//循环继续查找
if(n>)pime[++cnt]=n,s[cnt]++;//n==1说明已经除尽了,反之没有因为刚开始的是算sqrt(n)以内的素数。
}
ll ks(ll a,ll b)//快速幂
{ ll z=;
while(b)
{
if(b&)z=(z*a)%mod;
a=(a*a)%mod;
b>>=;
}
return z;
}
int main()
{
ll a,b;
cin>>a>>b;
//if(a<=1||b==0)
// {
// cout<<1;return 0;
// }//可要可不要
init(a);
ll sum=;
for(int i=;i<=cnt;i++)
{
if((pime[i]-)%mod==) sum=sum*(s[i]*b+)%mod;
else sum=(sum*(ks(pime[i],s[i]*b+)-)*ks(pime[i]-,mod-))%mod;//用等比数列求和公式
}cout<<(sum+mod)%mod;
}

输入a,b,求a^b的所有因子之和的更多相关文章

  1. Codeforces Round #467 (Div. 2) A. Olympiad[输入一组数,求该数列合法的子集个数]

    A. Olympiad time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...

  2. php实现求一个数的质数因子

    php实现求一个数的质数因子 一.总结 一句话总结:这么简单的题目,还是把变量定义的位置和自增的位置写错. 1 <?php 2 $num=trim(fgets(STDIN)); 3 //如果$n ...

  3. Leetcode之深度优先搜索(DFS)专题-129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers)

    Leetcode之深度优先搜索(DFS)专题-129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers) 深度优先搜索的解题详细介绍,点击 给定一个二叉树,它的每个结点都存放 ...

  4. 7-49 求前n项的阶乘之和 (15 分)

    从键盘输入一个整数n,求前n项的阶乘之和,1+2!+3!+...+n!的和 输入格式: 输入一个大于1的整数.例如:输入20. 输出格式: 输出一个整数.例如:2561327494111820313. ...

  5. Java实现 LeetCode 129 求根到叶子节点数字之和

    129. 求根到叶子节点数字之和 给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 12 ...

  6. [LeetCode] Sum Root to Leaf Numbers 求根到叶节点数字之和

    Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number ...

  7. c编程:求出4&#215;4矩阵中最大和最小元素值及其所在行下标和列下标,求出两条主对角线元素之和。

    //求出4×4矩阵中最大和最小元素值及其所在行下标和列下标,求出两条主对角线元素之和 #include <stdio.h> int main() { int sum=0; int max, ...

  8. 【二叉树-所有路经系列(根->叶子)】二叉树的所有路径、路径总和 II、路径总和、求根到叶子节点数字之和(DFS)

    总述 全部用DFS来做 重点一:参数的设置:为Root,路径字符串,路径List集合. 重点二:步骤: 1 节点为null 2 所有节点的操作 3 叶子结点的操作 4 非叶节点的操作 题目257. 二 ...

  9. 输入n,求1~n累加

    最开始可能会使用for循环来计算,现在直接使用等差数据计算和公式:s=(a0+n)*n/2 long sum(int n) { long ret=0: ret = (1+n)* n /2: retur ...

随机推荐

  1. 目前的.NET 主流的后端ORM框架

    转自:https://www.cnblogs.com/yeminglong/p/9518438.html  推荐一些常用的asp.net ORM框架 SqlSugar (国内) Dos.ORM (国内 ...

  2. Swift 4 经典数据结构 Data Struct大全

    快速看看吧,看看大神是如何写出最swifty的算法.我先fork一下,以表敬意. https://github.com/Imputes/swift-algorithm-club

  3. elasticsearch 踩坑

    1.elasticsearch head安装 集群连不上,修改配置 add http.cors.enabled: true you must also set http.cors.allow-orig ...

  4. springboot自定义配置信息读取

    在properties配置文件加入自定义配置例如: zxgl.detail.url=http://*****/zxgl-web/news/viewNewsIndexDetail.do?id= #资讯t ...

  5. 2018-2019-2 20165234 《网络对抗技术》 Exp0 Kali安装 Week1

    Week1 kali安装 一.下载系统镜像文件 首先下载系统镜像,进入kali官网,在Downloads中选择Download Kali Linux. 我选择的是64位版本,点击HTTP下载镜像文件. ...

  6. vuecli3 项目添加配置文件以及使用@映射、代理

    在根目录下新建 vue.config.js 1.vue.config.js中配置路径别名方法 // vue.config.js module.exports = { configureWebpack: ...

  7. 「JavaScript面向对象编程指南」对象

    对象的属性名可加上引号,下面三行代码所定义的内容是完全相同的 var hero = { occupation : 1 }; var hero = { "occupation" : ...

  8. 使用ansible实现轻量级的批量主机管理

    作者:邓聪聪 查看ansible配置文件下的hosts的文件 [root@ansible-server scripts]# cat /etc/ansible/hosts [test] 172.16.1 ...

  9. java学习笔记08-switch case语句

    switch是一种选择语句,可以通过匹配某个条件,来执行某块代码 switch(expression){ case value: break;//可选 default://可选 //语句 } swit ...

  10. /usr/bin/ld: warning: libavformat.so.57, needed by /home/camera.so, not found (try using -rpath or -rpath-link)

    ffmpeg中,使用libavformt.so.57时,查找不到. 解决方案: 修改ld.so.conf文件,添加路径. sudo gedit /etc/ld.so.conf 在文件末尾添加路径 /u ...