http://poj.org/problem?id=1845

题意:求A^B的所有约数的和再对9901取模

做了这个学到了N多数学知识;

一:任意一个整数都可以唯一分解成素因子的乘积;A = p1^k1*p2^k2*......*pn^kn;

  A先对2不断取模,当A%2==0时,2的次数加1,直到A%2!=0,A再尝试着对3不断取模.....依次进行下去,直到A = 1;

  当A本身就是素数时,A^1就是素数本身的分解式(特殊情况,别忘了加判断);

  这样A^B = p1^(k1*B) * p2(k2*B) * .......*pn^(kn*B);

二:一个数用素因子乘积表示后其约数和公式;

  A = p1^k1*p2^k2*......*pn^kn;

  则 素因子和 sum = (1+p1+p1^2+p1^3+......+p1^k1) * (1+p2+p2^2+p2^3......p2^k2) * ......*(1+pn+pn^1+pn^2+pn^3+.....pn^kn);

三:用二分递归求等比数列前n项和;

  求1+ p+p^2+p^3+.......+p^n

若n是奇数,共有偶数项,sum = (1+p+p^2+....+p^n/2)*(1+p^(n/2+1));

   若n是偶数,共有奇数项,sum = (1+p+p^2+.....+p^(n/2-1))*(1+p^(n/2+1))+p^n/2;

四:反复平方法求p^n;

  ans = 1;

  while(n>0)

  {

    if(n是奇数) ans = ans*p;

n = n/2;

    p = p*p;

  }

  ans = p^n;

  

 #include<stdio.h>
#include<string.h>
#include<math.h>
const int N = ;
const int mod = ;
int p[N];
int n[N];
int A,B; //将A分解成素因子的积,A = p[0]^n[0]+p[1]^n[1]+....+p[k-1 ]^n[k-1];
int Div(int A)
{
int k = ,i;
for(i = ; i*i <= A;)
{
if(A%i == )
{
n[k] = ;
p[k] = i;
while(!(A%i))
{
n[k]++;
A/=i;
}
k++;
}
if(i == )
i++;
else i += ;
}
if(A != )
{
p[k] = A;
n[k++] = ;
}
return k;
} long long power(long long p,long long n)//用反复平方法计算p^n;
{
long long sq = ;
while(n>)
{
if(n&)
sq = (sq*p)%mod;//若n是奇数,把p乘到sq;
n = n/;
p = p*p%mod;
}
return sq;
} long long cal(long long p,long long n)//用反复平方法计算1+p+p^2+....p^n;
{
if(n == )
return ;
if(n&)//如果n是奇数
return (cal(p,n/)*(+power(p,n/+)))%mod;
else return (cal(p,n/-)*(+power(p,n/+))+ power(p,n/))%mod;
} int main()
{
while(~scanf("%d %d",&A,&B))
{
int k,i,sum;
k = Div(A); sum = ;
for(i = ; i < k; i++)
{
sum = (sum*(cal(p[i],n[i]*B)%mod))%mod;
}
printf("%d\n",sum);
}
return ;
}

Sumdiv(各种数学)的更多相关文章

  1. POJ 1845 Sumdiv (数学,乘法逆元)

    题意: 给出数字A和B,要求AB的所有因子(包括AB和1)之和 mod 9901 的结果. 思路: 即使知道公式也得推算一阵子. 很容易知道,先把分解得到,那么得到,那么的所有因子之和的表达式如下: ...

  2. 『sumdiv 数学推导 分治』

    sumdiv(POJ 1845) Description 给定两个自然数A和B,S为A^B的所有正整数约数和,编程输出S mod 9901的结果. Input Format 只有一行,两个用空格隔开的 ...

  3. poj 1845 POJ 1845 Sumdiv 数学模板

    筛选法+求一个整数的分解+快速模幂运算+递归求计算1+p+p^2+````+p^nPOJ 1845 Sumdiv求A^B的所有约数之和%9901 */#include<stdio.h>#i ...

  4. POJ1845 Sumdiv 数学?逆元?

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

  5. Sumdiv(快速幂+约数和)

    Sumdiv Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 16244 Accepted: 4044 Description C ...

  6. Sumdiv 等比数列求和

    Sumdiv Sumdiv Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 15364   Accepted: 3790 De ...

  7. ACM数学

     1.burnside定理,polya计数法 这个专题我单独写了个小结,大家可以简单参考一下:polya 计数法,burnside定理小结 2.置换,置换的运算 置换的概念还是比较好理解的,< ...

  8. ACM数学知识体系

    在盛情收到学弟邀请给他们整理ACM数学方面的知识体系,作为学长非常认真的弄了好久,希望各学弟不辜负学长厚爱!!!非常抱歉因为电脑全盘格式化好多word.PPT都丢失,我尽量具体地给大家找到各知识点学习 ...

  9. B - Sumdiv(第三周)

    B - Sumdiv 题目链接:https://vjudge.net/contest/154063#problem/B 题意: 求A^B的所有约数(即因子)之和,并对其取模 9901再输出. 解题思路 ...

随机推荐

  1. [转] nginx 开启gzip压缩--字符串压缩比率很牛叉

    http://www.cnblogs.com/dasn/articles/3716055.html 刚刚给博客加了一个500px相册插件,lightbox引入了很多js文件和css文件,页面一下子看起 ...

  2. linux系统时间同步更新

    linux中的时钟分为系统时钟和硬件时钟.硬件时钟通过bioss进行设置,系统时钟通过linux kernel进行设置.当linux启动时,bioss会读取系统时钟的时钟设置.在linux中涉及时间设 ...

  3. linux,安装软件报错cannot create regular file '/usr/local/man/man1': No such file or directory

    make install时报错,如下 install: cannot create regular file '/usr/local/man/man1': No such file or direct ...

  4. JavaScript Boolean(布尔) 对象

    创建 Boolean 对象 Boolean 对象代表两个值:"true" 或者 "false" 下面的代码定义了一个名为 myBoolean 的布尔对象: va ...

  5. Java之webService知识

    Java之webService知识 1 webservice基础知识 1.1 webService请求的本质 一次webService本质请求,如下所示: 1.2 wsdl文档解析 wsdl文档元素结 ...

  6. [LeetCode OJ] Gas Station

    问题描述: There are N gas stations along a circular route, where the amount of gas at station i is gas[i ...

  7. c 连接数据库 mysql

    sudo apt-get install mysql-server mysql-client 再装开发包代码:sudo apt-get install libmysqlclient15-dev 安装完 ...

  8. CSS负边距自适应布局三例

    单列定宽单列自适应布局: <!DOCTYPE HTML> <html> <head> <meta charset=”UTF-8″> <title& ...

  9. php实现返回上一页的功能的3种有效方法

    php实现返回上一页的功能的3种有效方法 header(location:你的上一页的路径);   //   注意这个函数前不能有输出 header(location:.getenv("HT ...

  10. ThinkPHP接入支付宝支付功能

    最近做系统,需要实现在线支付功能,毫不犹豫,选择的是支付宝的接口支付功能.这里我用的是即时到帐的接口,具体实现的步骤如下: 一.下载支付宝接口包 下载地址:https://b.alipay.com/o ...