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. 转:全面分析 Spring 的编程式事务管理及声明式事务管理

    转:from: https://www.ibm.com/developerworks/cn/education/opensource/os-cn-spring-trans/

  2. android项目 之 记事本(13) ----- 查看图片及播放录音

    本文是自己学习所做笔记,欢迎转载.但请注明出处:http://blog.csdn.net/jesson20121020 今天就来实现下查看图片及录音的功能,在编辑或者浏览记事时,点击图片.打开一个自己 ...

  3. mongoDB 删除某一字段、重新名字段

    批量删除字段: {multi:true}:查询到的所有记录都删除. db.collection_name.update({"target_field":{"$exists ...

  4. Oracle基础 自定义函数

    一.函数 函数与存储过程相似,也是数据库中存储的已命名PL-SQL程序块.函数的主要特征是它必须有一个返回值.通过return来指定函数的返回类型.在函数的任何地方可以通过return express ...

  5. python——操作符重载(重要)

    类可以重载python的操作符   旧认识:__X__的名字 是系统定义的名字:是python特殊方法专用标识.   操作符重载使我们的对象与内置的一样.__X__的名字的方法是特殊的挂钩(hook) ...

  6. JVM源码分析之FinalReference完全解读

    Java对象引用体系除了强引用之外,出于对性能.可扩展性等方面考虑还特地实现了4种其他引用:SoftReference.WeakReference.PhantomReference.FinalRefe ...

  7. [Python]BeautifulSoup—HTML解析包

    在用Python写爬虫时,一个常见的操作是对抓下的HTML做分析处理,得到想要的内容.一般的方法为使用Python的re库中.用正則表達式来解析文本.只是这样的方法适用于全部的文本.而针对于特定格式的 ...

  8. C#自动切换Windows窗口程序,如何才能调出主窗口?

      namespace AutoChangeWindow { partial class Form1 { /// <summary> /// 必需的设计器变量. /// </summ ...

  9. Linux下, Eclipse C/C++ IDE下编辑好C/C++源程序之后要先保存!!!否则,就会……

    注意:Linux下, Eclipse C/C++ IDE下编辑好C/C++源程序之后要先保存! ! ! 然后Project-->Build All/Build Project,再点绿箭头执行.否 ...

  10. windows下简单配置squid反向代理服务器

    下载windwosNT版本的squid下载地址: http://squid.acmeconsulting.it/download/squid-2.6.STABLE13-bin.zip 1.把squid ...