Time Limit: 1000MS   Memory Limit: 30000K
Total Submissions: 20971   Accepted: 5290

Description

Consider two natural numbers A and B. Let S be the sum of all natural divisors of A^B. Determine S modulo 9901 (the rest of the division of S by 9901).

Input

The only line contains the two natural numbers A and B, (0 <= A,B <= 50000000)separated by blanks.

Output

The only line of the output will contain S modulo 9901.

Sample Input

2 3

Sample Output

15

Hint

2^3 = 8. 
The natural divisors of 8 are: 1,2,4,8. Their sum is 15. 
15 modulo 9901 is 15 (that should be output). 
 
//题意:给出 A,B 问 A^B 的所有因数(包括 1 和本身)之和余 9901 的值
这道题用了很多个数学的方法,一个个讲
首先,我们要知道怎么分解一个数,所以用到了<唯一分解定理>: 任何大于1的自然数,都可以唯一分解成有限个质数的乘积
将 A 分解后,将所有质数个数乘 B 就是 A^B 的该质数的个数了.
代码:
 void Zhi()
{
int t = a;
for (int i=;i*i<=a;i++)
{
if (t%i==)
{
p[z]=i;
p_n[z]=;
t/=i;
while (t%i==)
{
p_n[z]++;
t/=i;
}
z++;
}
if (t==) break;
if (i!=)
i++;//2.3.5.7.9...
}
if (t!=)//本身就是质数
{
p[z]=t;
p_n[z]=;
z++;
}
}
 
为什么要分解呢,因为要求约数和
<约数和公式>

对于已经分解的整数A=(p1^k1)*(p2^k2)*(p3^k3)*....*(pn^kn)

有 A 的所有因子之和为

S = (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)

但是,使用这个公式不能用等比求和公式,因为我们要求余,等比数列求和公式求余就错了

所以用到了二分求等比数列和

用递归二分求等比数列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);

上式加粗的前半部分恰好就是原式的一半,依然递归求解

前提是要用到<同余模公式>

(a+b)%m=(a%m+b%m)%m

(a*b)%m=(a%m*b%m)%m

还有<快速幂>

应该不难,看看代码能懂

 int Mi(int a, int b)//快速幂
{
int res = ;
a %= MOD;
while (b)
{
if (b%==)
res = (res * a)%MOD;
a = (a * a)%MOD;
b /= ;
}
return res;
}

好了,递归二分代码

 int Erfen(int p , int n)//求 1 + p + p^2 + p^3+ ... +p^n
{
if (n==) return ;
if (n%==)
return ((Mi(p,n/+)+) * Erfen(p,n/))%MOD;
else
return ((+Mi(p,n/+)) * Erfen(p,n/-) + Mi(p,n/))%MOD;
}

上总代码:

 #include <iostream>
#include <stdio.h>
#include <string.h> using namespace std; #define MOD 9901 int a,b,z;
int p[]; //质数
int p_n[];//质数个数 void Zhi()
{
int t = a;
for (int i=;i*i<=a;i++)
{
if (t%i==)
{
p[z]=i;
p_n[z]=;
t/=i;
while (t%i==)
{
p_n[z]++;
t/=i;
}
z++;
}
if (t==) break;
if (i!=)
i++;//2.3.5.7.9...
}
if (t!=)//本身就是质数
{
p[z]=t;
p_n[z]=;
z++;
}
} int Mi(int a, int b)//快速幂
{
int res = ;
a %= MOD;
while (b)
{
if (b%==)
res = (res * a)%MOD;
a = (a * a)%MOD;
b /= ;
}
return res;
} int Erfen(int p , int n)//求 1 + p + p^2 + p^3+ ... +p^n
{
if (n==) return ;
if (n%==)
return ((Mi(p,n/+)+) * Erfen(p,n/))%MOD;
else
return ((+Mi(p,n/+)) * Erfen(p,n/-) + Mi(p,n/))%MOD;
} int main()
{
while (scanf("%d%d",&a,&b)!=EOF)
{
z=;//质数个数
Zhi(); int ans = ;
for (int i=;i<z;i++)
{
ans = (ans * Erfen(p[i],p_n[i]*b))%MOD;
}
printf("%d\n",ans);
}
return ;
}

Sumdiv(较难数学题)的更多相关文章

  1. SAT考试里最难的数学题? · 三只猫的温暖

    问题 今天无意中在Quora上看到有人贴出来一道号称是SAT里最难的一道数学题,一下子勾起了我的兴趣.于是拿起笔来写写画画,花了差不多十五分钟搞定.觉得有点意思,决定把解题过程记下来.原帖的图太小,我 ...

  2. CF 327D - Block Tower 数学题 DFS 初看很难,想通了就感觉很简单

    D. Block Tower time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  3. poj1845 Sumdiv

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

  4. NEFU 117 - 素数个数的位数 - [简单数学题]

    题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=117 Time Limit:1000ms Memory Limi ...

  5. NYOJ 330 一个简单的数学题【数学题】

    /* 题目大意:求解1/n; 解题思路:写一个输出小数的算法 关键点:怎样处理小数点循环输出 解题人:lingnichong 解题时间:2014-10-18 09:04:22 解题体会:输出小数的算法 ...

  6. LG2662 牛场围栏 和 test20181107 数学题

    P2662 牛场围栏 题目背景 小L通过泥萌的帮助,成功解决了二叉树的修改问题,并因此写了一篇论文, 成功报送了叉院(羡慕不?).勤奋又勤思的他在研究生时期成功转系,考入了北京大学光华管理学院!毕业后 ...

  7. 微信群里一道六年级数学题,求阴影面积,那我只能用python代码了

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http ...

  8. C. Tourist Problem 2021.3.29 晚vj拉题 cf 1600 纯数学题

    拉题链接  https://vjudge.net/contest/430219#overview 原题链接  https://codeforces.com/problemset/problem/340 ...

  9. 看完SQL Server 2014 Q/A答疑集锦:想不升级都难!

    看完SQL Server 2014 Q/A答疑集锦:想不升级都难! 转载自:http://mp.weixin.qq.com/s/5rZCgnMKmJqeC7hbe4CZ_g 本期嘉宾为微软技术中心技术 ...

随机推荐

  1. C# this.Invoke()的作用与用法

    Invoke()的作用是:在应用程序的主线程上执行指定的委托.一般应用:在辅助线程中修改UI线程( 主线程 )中对象的属性时,调用this.Invoke();   在多线程编程中,我们经常要在工作线程 ...

  2. Java程序猿修炼之道 之 Logging(3/3) - 怎么分析Log

    1. 说明 作为一个程序猿我们常常要做一件事情:获取某个Log文件,从当中找出自己想要的信息. 本文总结了我在工作中使用了哪些工具来分析Log文件获取我想要的信息,我近期几年的工作环境都是server ...

  3. Elasticsearch教程(九) elasticsearch 查询数据 | 分页查询

    Elasticsearch  的查询很灵活,并且有Filter,有分组功能,还有ScriptFilter等等,所以很强大.下面上代码: 一个简单的查询,返回一个List<对象> ..    ...

  4. 怎样优雅的研究 RGSS3 (四) 使窗体从画面边缘弹出

    在非常多游戏中,窗体能够从游戏画面的边缘弹出. 而在 RGSS3 的默认脚本中时没有这样的功能的,当在地图上按下取消键时.游戏菜单会突然出现. 如今我们能够为主菜单加入动画效果,使其在屏幕边缘弹出. ...

  5. rpc接口mock平台

    转载:http://blog.csdn.net/ronghuanye/article/details/71124320 1.简介 平台采用struts.spring.mybatis框架开发设计,主要用 ...

  6. azkaban2.5 具体配置以及使用方式

    azkaban支持shell.java.mapreduce以及hive的工作流调度,在对这些不同类型任务调度之前须要配置所相应的插件:azkaban总体分为两部分azkaban executor se ...

  7. Laravel之命令

    一.创建命令 php artisan make:console SendEmails 上述命令将会生成一个类app/Console/Commands/SendEmails.php,当创建命令时,--c ...

  8. Oracle创建表空间与用户

    /* 说明:若已经存在相应的用户和表空间,则需要先删除相应的用户和表空间 然后再全部重新建立 */ --删除用户 drop user XDAYWEIXIN cascade; --删除表空间 drop ...

  9. [JAVA &#183; 0基础]:11.终结者-final

    关于finalkeyword的总结,是非常easy学习和掌握的,大致分为用final修饰的符号常量.类.方法.属性四部分.而这四部分的内容也是我们必须掌握的,非常有用.在项目中常常来利用finalke ...

  10. zabbix web monitoring 监控网页

    配置 Web 场景 配置 web 场景: 转到: 配置 (Configuration)–>主机 (或者 模板 ) 点击主机 (host)/ 模板 (template) 行中的 Web 点击右上角 ...