poj1845 Sumdiv 数学题

令人痛苦van分的数学题!

题意:求a^b的所有约数(包括1和它本身)之和%9901

这怎么做呀!!!

百度:约数和定理,会发现 p1^a1 * p2^a2 * ... * pn^an
这个数的约数和是:
(1 + p1 + p1^2 + ... + p1^a1) * (1 + p2 + ... + p2^a2) * ... * (1 + pn + ... + pn^an)

证明:由乘法原理可直接证明

然后我们对于a^b运用这个公式即可。
那么对于 (1 + pi + ... + pi^ai) 我们难道要暴力求吗?
不,这显然是个等比数列!我们用公式!

那么我们就成功WA了!

…查找原因,发现q-1可能是9901的整数倍,导致无法求逆元。
那么我们退而求次,用递归求和!

a1 + a1*q + a1*q^2 + ... + a1*q^n = (q^(n/2) + 1) * (a1 + a1*q + ... + a1*q^(n/2))

把上面那个式子分n的奇偶讨论一下就行了。

(法②:当q-1为9901的整数倍时,q % 9901 = 1,又因为a1 = 1,上式显然为n + 1)

然后我们开开心心的调了一年之后WA了….
查找原因:没开long long导致qpow爆了
然后就A了!

 //poj1845 sumdiv
#include <cstdio>
using namespace std;
const int N = ,mo = ;
int p[N][],P;
int qpow(int a,int b) {
int ans=;
while(b) {
if(b&) {
ans=ans*a%mo;
}
a=a*a%mo;
b=b>>;
}
return ans;
} void split(int a,int b) {
for(int i=; a>; i++) {
if(!(a%i)) {
p[++P][] = i;
}
while(!(a%i)) {
a/=i;
p[P][]++;
}
}
for(int i=; i<=P; i++) {
p[i][]*=b;
}
return;
} long long getQsum(int a1,int q,int n) {
if(q==) {
return a1*n%mo;
}
if(n==) {
return a1;
}
if(n&) { //奇数
long long ans = ((+qpow(q,n>>))*getQsum(a1,q,n>>)+(a1*qpow(q,n-)))%mo;
return ans;
}
//偶数
long long ans = ((+qpow(q,n>>))*(getQsum(a1,q,n>>)))%mo;
return ans;
} void solve() {
long long ans=;
for(int i=; i<=P; i++) {
int temp=getQsum(,p[i][],p[i][]+);
ans*=temp;
ans%=mo;
}
printf("%I64d",ans);
return;
} int main() {
//freopen("in.in","r",stdin);
//freopen("my.out","w",stdout);
int a,b;
scanf("%d%d",&a,&b);
if(!a) {
printf("");
return ;
}
split(a,b);
solve();
return ;
}

AC代码:

我们学到了什么?

我们学到了什么?

  1. 约数和定理
  2. How to 求逆元
  3. How to 递归求等比数列和
  4. 开long long!!!!

————————end————————

poj1845 Sumdiv的更多相关文章

  1. POJ1845 Sumdiv [数论,逆元]

    题目传送门 Sumdiv Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 26041   Accepted: 6430 Des ...

  2. 【题解】POJ1845 Sumdiv(乘法逆元+约数和)

    POJ1845:http://poj.org/problem?id=1845 思路: AB可以表示成多个质数的幂相乘的形式:AB=(a1n1)*(a2n2)* ...*(amnm) 根据算数基本定理可 ...

  3. 约数之和(POJ1845 Sumdiv)

    最近应老延的要求再刷<算法进阶指南>(不得不说这本书不错)...这道题花费了较长时间~(当然也因为我太弱了)所以就写个比较易懂的题解啦~ 原题链接:POJ1845 翻译版题目(其实是AcW ...

  4. POJ1845 Sumdiv(求所有因数和+矩阵快速幂)

    题目问$A^B$的所有因数和. 根据唯一分解定理将A进行因式分解可得:A = p1^a1 * p2^a2 * p3^a3 * pn^an.A^B=p1^(a1*B)*p2^(a2*B)*...*pn^ ...

  5. poj1845 sumdiv (因数的和)

    首先分解质因数,$A^B=p_1^{m_1B}p_2^{m_2B}...p_n^{m_nB}$ 然后的话,它的所有因数的和就是$\prod{(1+p_i^1+p_i^2+...+p_i^n)}$ 用一 ...

  6. POJ1845 sumdiv 数论

    正解:小学数学数论 解题报告: 传送门! 其实不难但我数学这个方面太菜了所以还是多写点儿博客趴QAQ 然后因为是英文的所以先翻译一下,,,? 大概就是说求AB的所有约数之和,对9901取膜 这个只需要 ...

  7. POJ1845 Sumdiv 数学?逆元?

    当初写过一篇分治的 题意:求A^B的所有因子之和,并对其取模 9901再输出 对于数A=p1^c1+p2^c2+...+pn*cn,它的所有约数之和为(1+p1+p1^2+p1^3+...+p1^(c ...

  8. 题解 poj1845 Sumdiv (数论) (分治)

    传送门 大意:求A^B的所有因子之和,并对其取模 9901再输出 (这题又调了半天,把n和项数弄混了QAQ) 根据算数基本定理:A=(p1^k1)*(p2^k2)*(p3^k3)*...*(pn^kn ...

  9. noip2017考前整理(未完)

    快考试了,把我以前写过的题回顾一下.Noip2007 树网的核:floyd,推出性质,暴力.Noip2008 笨小猴:模拟Noip2008 火柴棒等式:枚举Noip2008 传纸条:棋盘dpNoip2 ...

随机推荐

  1. Some beautiful Progress Bars in WPF

    1.Better WPF Circular Progress Bar 2.Bending the WPF ProgressBar 3.A CIRCULAR PROGRESSBAR STYLE USIN ...

  2. Sublime Text3配置

    { "default_encoding": "UTF-8", "font_size": 16.0, "tab_size" ...

  3. js 首次进入弹窗

    今天有个需求,首次进入需要弹窗,然后就在网上找了下,虽然看了很多但是说的都不是我想要的,最后终于到了一个合适的. function get_cookie(Name) { var search = Na ...

  4. Linux基础学习(14)--日志管理

    第十四章——日志管理 一.日志管理简介 1.日志服务: 2.常见日志的作用: 二. rsyslogd日志服务 1.日志文件格式: 2./etc/rsyslog.conf配置文件: 三.日志轮替 1.日 ...

  5. java split(regex,limit) 使用记录

    1.split(“,”,0):是切割默认模式等同于split(",")结尾符合分割字符为空不进行进行分割,如图: 2.split(",",-1):limit参数 ...

  6. Vue-router的API详解

    前面的话 本文将详细介绍Vue-router的API router-link <router-link> 组件支持用户在具有路由功能的应用中点击导航. 通过 to 属性指定目标地址,默认渲 ...

  7. React 设计模式 --- Container and Presentational pattern(容器和展示组件分离)

    在React开发中,一个典型的React组件通常会混杂着逻辑操作部分和展示部分.逻辑操作部分指的是和页面UI无关的内容,如API的调用,数据的处理,事件处理函数. 展示部分则指的是创建页面UI 的内容 ...

  8. git 回退版本

    回滚到指定的版本 git reset --hard e377f60e28c8b84158 强制提交 git push -f origin master

  9. BZOJ2242[SDOI2011]计算器——exgcd+BSGS

    题目描述 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给定y,z,p, ...

  10. HDU4341-Gold miner-分组DP

    模拟黄金矿工这个游戏,给出每一个金子的位置和所需时间,计算在给定时间内最大收益. 刚看这道题以为金子的位置没什么用,直接DP就行,WA了一发终于明白如果金子和人共线的话只能按顺序抓. 这就是需要考虑先 ...