POJ1845:Sumdiv(求因子和+逆元+质因子分解)好题
题目链接:http://poj.org/problem?id=1845
s(n)=[(p1^a1+1 -1)/(p1-1)]*[(p2^a2+1 -1)/(p2-1)]*[(p3^a3+1 -1)/(p3-1)]***[(ps^as+1 -1)/(ps-1)];(因子和)
又因为s(n)%mod等于每一个部分取模,所以可以逐步求解,如求(p1^a1+1 -1)/(p1-1)%mod,在这里就要运用除法取模所以要用到乘法逆元的概念,
即(a/b) %p= ( a *b^(-1)%p) ,又因为(a^b) % p = ((a % p)^b) % p ,
所以(p1^a1+1 -1)/(p1-1)%mod==(((p1%mod)^a1+1 -1)%mod*(p1-1)^-1)%mod;
当然存在逆元的前提是gcd(a,p)==1;
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
#define N 500010
#define mod 9901
typedef __int64 ll;
using namespace std;
ll a,b,X,Y;
ll ans[N],num[N],top;
ll pow(ll x,ll k)
{
ll t=;
while(k)
{
if(k&) t=((t%mod)*(x%mod))%mod;
k>>=;
x=((x%mod)*(x%mod))%mod;
}
return t;
}
void extend(__int64 A,__int64 B,__int64 &x1, __int64 &y1)
{
if(B==)
{
x1=;
y1=;
return ;
}
extend(B,A%B,x1,y1);
ll t=x1;
x1=y1;
y1=t-(A/B)*y1;
return ;
}
void solve()
{
ll sum=,A,xx;
for(int i=; i<top; i++)
{
if(ans[i]%mod==) continue;//关键的两个判断,关系到求逆元。 如果ans[i]%mod=0,那么有等级公式可以看出,原式小于0,所以也只能利用原式求,结果为1
if(ans[i]%mod==)//即mod|(ans[i]-1),因为ans[i]>=2,所以ans[i]不可能等于1,这是gcd(ans[i]-1,mod)==mod,不存在逆元,无法利用扩展欧几里得求逆元
{ //这时为(1+ans[i]^1+ans[i]^2+.....+ans[i]^num[i])%mod=(num[i]+1)%mod;
sum=(sum*(num[i]+))%mod;
continue;
}
A=pow(ans[i],num[i]+);
A=(A-)%mod;
extend(ans[i]-,mod,X,Y);//因为ans[i]为素数,ans[i]-1为偶数,所以ans[i]-1与9901互质
xx=(X%mod+mod)%mod;
A=((A%mod)*(xx%mod))%mod;
sum=(sum*A)%mod;
}
printf("%I64d\n",sum);
}
int main()
{
while(scanf("%I64d%I64d",&a,&b)!=EOF)
{
if(a==)
{
printf("0\n");
continue;
}
else if(a==||b==)
{
printf("1\n");
continue;
}
ll t=a;
top=;
memset(num,,sizeof(num));
for(int i=; i*i<=a; i++)
{
if(t%i==)
{
num[top]++;
ans[top]=i;
t/=i;
while(t%i==)
{
num[top]++;
t/=i;
}
top++;
}
}
if(t>)
{
num[top]++;
ans[top++]=t;
}
for(int i=; i<top; i++)
{
num[i]*=b;
}
solve();
}
return ;
}
POJ1845:Sumdiv(求因子和+逆元+质因子分解)好题的更多相关文章
- HDU1452:Happy 2004(求因子和+分解质因子+逆元)上一题的简单版
题目链接:传送门 题目要求:求S(2004^x)%29. 题目解析:因子和函数为乘性函数,所以首先质因子分解s(2004^x)=s(2^2*x)*s(3^x)*s(167^x); 因为2与29,166 ...
- ATcoder E - Flatten 质因子分解求LCM
题解:其实就是求n个数的lcm,由于数据特别大,求lcm时只能用质因子分解的方法来求. 质因子分解求lcm.对n个数每个数都进行质因子分解,然后用一个数组记录某个质因子出现的最大次数.然后累乘pow( ...
- POJ 1845 Sumdiv(求因数和 + 逆元)题解
题意:给你a,b,要求给出a^b的因子和取模9901的结果. 思路:求因子和的方法:任意A = p1^a1 * p2^a2 ....pn^an,则因子和为sum =(1 + p1 + p1^2 + . ...
- BZOJ 1485: [HNOI2009]有趣的数列 [Catalan数 质因子分解]
1485: [HNOI2009]有趣的数列 Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所 ...
- poj1845 Sumdiv
poj1845 Sumdiv 数学题 令人痛苦van分的数学题! 题意:求a^b的所有约数(包括1和它本身)之和%9901 这怎么做呀!!! 百度:约数和定理,会发现 p1^a1 * p2^a2 * ...
- Lightoj-1356 Prime Independence(质因子分解)(Hopcroft-Karp优化的最大匹配)
题意: 找出一个集合中的最大独立集,任意两数字之间不能是素数倍数的关系. 思路: 最大独立集,必然是二分图. 最大数字50w,考虑对每个数质因子分解,然后枚举所有除去一个质因子后的数是否存在,存在则建 ...
- LightOJ1138 —— 阶乘末尾0、质因子分解
题目链接:https://vjudge.net/problem/LightOJ-1138 1138 - Trailing Zeroes (III) PDF (English) Statistic ...
- LightOJ1336 Sigma Function —— 质因子分解、约数和为偶数
题目链接:https://vjudge.net/problem/LightOJ-1336 1336 - Sigma Function PDF (English) Statistics Forum ...
- P2043 质因子分解
P2043 质因子分解 题目描述 对N!进行质因子分解. 输入输出格式 输入格式: 输入数据仅有一行包含一个正整数N,N<=10000. 输出格式: 输出数据包含若干行,每行两个正整数p,a,中 ...
随机推荐
- 搭建基于 HDFS 碎片文件存储服务
安装 JDK HDFS 依赖 Java 环境,这里我们使用 yum 安装 JDK 8,在终端中键入如下命令: yum -y install java-1.8.0-openjdk* 使用如下命令查看下 ...
- mysql数据库中,查看某个数据库下的表的存储类型都有哪些
需求描述: 在备份数据库的时候,使用mysqldump进行数据库的备份,如果库中仅仅有innodb存储引擎, 那么使用--single-transaction就可以,如果还有其他的存储引擎类型就要使用 ...
- fiddler抓包,搞定接口
上篇介绍的世纪佳缘登录是由已有cookie保持登录状态的.世纪佳缘登陆不需要填入验证码,可以很方便直接请求登录接口来达到登录状态的目的. 这篇介绍直接从登录接口进行登录,那么这就要求要找到登录接口ur ...
- [java] java 线程join方法详解
join方法的作用是使所属线程对象正常执行run方法,而对当前线程无限期阻塞,直到所属线程销毁后再执行当前线程的逻辑. 一.先看普通的无join方法NoJoin.java public class N ...
- iOS-WKWebView使用
使用代码:可直接粘贴到自己项目中使用 .h #import "BaseViewController.h" @interface LinkNewsController : BaseV ...
- python语言简介、解释器、字符编码介绍
一.为什么要选择python作为学习语言: 各个语言的对比: C和python.java.C#等 C语言:代码编译得到机器码,机器码在处理器上直接执行,每一条指令控制cpu工作 其他语言:代码编译得到 ...
- Linux 下安装 Python3
Linux CentOS 7 安装 Python3: [root@localhost ~]$ yum install -y epel-release [root@localhost ~]$ yum i ...
- git的常见问题
今天把电脑清理了下再push就出问题了 ,报这个错Failed with error: fatal: unable to access 'https://git.oschina.net/dubo_/G ...
- PyQt4单选框QCheckBox
PyQt4中的部件 部件是构建应用程序的基础元素.PyQt4工具包拥有大量的种类繁多的部件.比如:按钮,单选框,滑块,列表框等任何程序员在完成其工作时需要的部件. QCheckBox单选框 单选框具有 ...
- Eclipse+pydev解决中文显示和注释问题的方法大全
Eclipse+pydev解决中文显示和注释问题的方法大全 Eclipse的设置 window->preferences->general->editors->textedit ...