传送门


大意:求A^B的所有因子之和,并对其取模 9901再输出

(这题又调了半天,把n和项数弄混了QAQ)

根据算数基本定理:A=(p1^k1)*(p2^k2)*(p3^k3)*...*(pn^kn) (pi为素数)

则A的所有因子之和Sum=(1+p1+p1^2+p1^3+...p1^k1) * (1+p2+p2^2+p2^3+….p2^k2) * (1+p3+ p3^3+…+ p3^k3) * .... * (1+pn+pn^2+pn^3+...pn^kn)

那么A^B = p1^(k1*B) * p2^(k2*B) * p3^(k3*B) *...* pn^(kn*B)

所以Sum=[1+p1+p1^2+...+p1^(a1*B)] * [1+p2+p2^2+...+p2^(a2*B)] *...* [1+pn+pn^2+...+pn^(an*B)]

用分治求等比数列1+pi+pi^2+pi^3+...+pi^n:

(1)若n为奇数(有偶数项)则:
        1 + p + p^2 + p^3 +...+ p^n

  = (1+p^(n/2+1)) + p * (1+p^(n/2+1)) +...+ p^(n/2) * (1+p^(n/2+1))

  = (1 + p + p^2 +...+ p^(n/2)) * (1 + p^(n/2+1))

(2)若n为偶数(有奇数项)则:
        1 + p + p^2 + p^3 +...+ p^n

  = (1+p^(n/2+1)) + p * (1+p^(n/2+1)) +...+ p^(n/2-1) * (1+p^(n/2+1)) + p^(n/2)

  = (1 + p + p^2 +...+ p^(n/2-1)) * (1+p^(n/2+1)) + p^(n/2);

可以递归求解

#include<cstdio>
#include<iostream>
#include<algorithm>
#define R register int
#define ll long long
const int mod=;
using namespace std;
int a,b,tot,ans=;
int pm[],cnt[]; inline ll q_pow(ll a,ll p)
{
if(a==) return ;
R ret=; a%=mod;
for(;p;p>>=,(a*=a)%=mod) if(p&) (ret*=a)%=mod;
return ret;
} ll sum(ll a,ll c)
{
if(c==) return ;
if(c&) return ((+q_pow(a,(c>>)+))%mod*sum(a,(c>>))%mod)%mod;
return ((+q_pow(a,(c>>)+))%mod*sum(a,(c-)>>)+q_pow(a,c>>)%mod)%mod;
} int main()
{
scanf("%d%d",&a,&b);
for(R i=;i*i<=a;i+=(i&?:))
if(a%i==)
{
pm[++tot]=i;
while(a%i==) cnt[tot]++,a/=i;
}
if(a!=) pm[++tot]=a,cnt[tot]++;//要判断一下A本身是不是素数
for(R i=;i<=tot;i++) ans=(ans*(sum(pm[i],cnt[i]*b)%mod))%mod;
printf("%d\n",ans);
}

如有错误,恳请您指正(我太菜了);如有不理解,可留言,我会尽量回复。。。(高中生(逃)。。)

by Jackpei 2019.2.25

题解 poj1845 Sumdiv (数论) (分治)的更多相关文章

  1. POJ1845 sumdiv 数论

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

  2. POJ1845 Sumdiv [数论,逆元]

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

  3. 【题解】Sumdiv

    [题解]Sumdiv 传送门 根据组合的乘法原理,一个数的所有约数和 \[ sum=\prod_{i=1} \Sigma_j^{a_i} p_i^j \] 所以任务就变成了分解\(A\)的质因数,分解 ...

  4. poj1845 Sumdiv

    poj1845 Sumdiv 数学题 令人痛苦van分的数学题! 题意:求a^b的所有约数(包括1和它本身)之和%9901 这怎么做呀!!! 百度:约数和定理,会发现 p1^a1 * p2^a2 * ...

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

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

  6. 【POJ 1845】Sumdiv——数论 质因数 + 分治 + 快速幂

    (题面来自luogu) 题目描述 输入两个正整数a和b,求a^b的所有因子之和.结果太大,只要输出它对9901的余数. 输入格式 仅一行,为两个正整数a和b(0≤a,b≤50000000). 输出格式 ...

  7. 约数之和(POJ1845 Sumdiv)

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

  8. POJ1845 Sumdiv 数学?逆元?

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

  9. 【题解】localmaxima 数论

    # T749 localmaxima 权限限制没有超链接 题目描述 Description 给出一个排列,若其中一个数比它前面的数都大,则称为localmaxima数,求一个随机排列中localmax ...

随机推荐

  1. VLAN虚拟局域网技术(三)-计算机网络

    本文主要知识来源于学校课程,部分知识来自于H3C公司教材,未经许可,禁止转载.如需转载,请联系作者并注明出处. 本节主要介绍 pVLAN和 动态VLAN. 1.   pVLAN:英文全称Private ...

  2. matlab之find()函数

    Find 这个函数用处也挺大的,这几天看很多程序都见到这一函数,今天要好好给阐述,了解下这个函数是为了找到矩阵或者是数组,向量中的非零元素.下面一大段英文没耐心看.看看例子就行了. 第一个用法是 nd ...

  3. myBatis 如何接受 返回count(*),sum()得到的int值

    <select id="selectRemainder" resultType="java.lang.Integer"> SELECT SUM(aw ...

  4. COM中[int],[out],[out,retval]的含义

    COM中在声明函数中通常会这样: HRESULT getName([in]int ID,[out,retval]*BSTR name) 实现函数时,这样: STDMETHODIMP Person::g ...

  5. 001-Bootstrap栅格系统

    1 安装和基本使用 外文官网 中文官网 可以正常下载使用 有三个文件夹, 分别是css, fonts, js bootstrap/ ├── css/ │ ├── bootstrap.css │ ├── ...

  6. Oracle数据库导入、导出(远程、10g、11g)

    1  查看oracle的版本信息 (1)用客户端连接到数据库,执行select * from v$instance             查看version项 (2)select * from pr ...

  7. 2010浙大:zoj问题

    题目描述: 对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC. 是否AC的规则如下:1. zoj能AC:2. 若字符串形式为xzojx,则也能AC,其中x可以是N个'o' 或者 ...

  8. caffe template

    http://www.cnblogs.com/ggjucheng/archive/2011/12/18/2292090.html

  9. [nyoj737]石子归并(区间dp入门题)

    题意:有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆.求出总的代价最小值 ...

  10. SMB SMB2 协议wiki

    from:https://wiki.wireshark.org/SMB2/BufferCode https://msdn.microsoft.com/en-us/library/ee441872.as ...