Sumdiv(较难数学题)
Time Limit: 1000MS | Memory Limit: 30000K | |
Total Submissions: 20971 | Accepted: 5290 |
Description
Input
Output
Sample Input
2 3
Sample Output
15
Hint
The natural divisors of 8 are: 1,2,4,8. Their sum is 15.
15 modulo 9901 is 15 (that should be output).
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(较难数学题)的更多相关文章
- SAT考试里最难的数学题? · 三只猫的温暖
问题 今天无意中在Quora上看到有人贴出来一道号称是SAT里最难的一道数学题,一下子勾起了我的兴趣.于是拿起笔来写写画画,花了差不多十五分钟搞定.觉得有点意思,决定把解题过程记下来.原帖的图太小,我 ...
- CF 327D - Block Tower 数学题 DFS 初看很难,想通了就感觉很简单
D. Block Tower time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- poj1845 Sumdiv
poj1845 Sumdiv 数学题 令人痛苦van分的数学题! 题意:求a^b的所有约数(包括1和它本身)之和%9901 这怎么做呀!!! 百度:约数和定理,会发现 p1^a1 * p2^a2 * ...
- NEFU 117 - 素数个数的位数 - [简单数学题]
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=117 Time Limit:1000ms Memory Limi ...
- NYOJ 330 一个简单的数学题【数学题】
/* 题目大意:求解1/n; 解题思路:写一个输出小数的算法 关键点:怎样处理小数点循环输出 解题人:lingnichong 解题时间:2014-10-18 09:04:22 解题体会:输出小数的算法 ...
- LG2662 牛场围栏 和 test20181107 数学题
P2662 牛场围栏 题目背景 小L通过泥萌的帮助,成功解决了二叉树的修改问题,并因此写了一篇论文, 成功报送了叉院(羡慕不?).勤奋又勤思的他在研究生时期成功转系,考入了北京大学光华管理学院!毕业后 ...
- 微信群里一道六年级数学题,求阴影面积,那我只能用python代码了
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http ...
- C. Tourist Problem 2021.3.29 晚vj拉题 cf 1600 纯数学题
拉题链接 https://vjudge.net/contest/430219#overview 原题链接 https://codeforces.com/problemset/problem/340 ...
- 看完SQL Server 2014 Q/A答疑集锦:想不升级都难!
看完SQL Server 2014 Q/A答疑集锦:想不升级都难! 转载自:http://mp.weixin.qq.com/s/5rZCgnMKmJqeC7hbe4CZ_g 本期嘉宾为微软技术中心技术 ...
随机推荐
- apache2.2 到 2.4后配置文件需要更改的部分
参考: http://www.dotblogs.com.tw/maple ... e24_httpd_conf.aspx 1. 访问控制2.2 的时候Order deny,allowDeny fro ...
- C语言中不同类型的数据转换规则
不同类型数据间的混合运算与类型转换 1.自动类型转换 在C语言中,自动类型转换遵循以下规则: ①若参与运算量的类型不同,则先转换成同一类型,然后进行运算 ②转换按数据长度增加的方向进行,以保证精度不降 ...
- SWIG 多语言接口变换 【转】
一. SWIG 是Simple Wrapper and Interface Generator的缩写,是一个帮助使用C或者C++编写的软件创建其他编语言的API的工具.例如,我 ...
- 遍历Enumeration
版权声明:http://blog.csdn.net/qq924862077/ Enumeration(枚举)接口的作用和Iterator类似,只提供了遍历Vector和HashTable类型集合元素的 ...
- [转载]How to Install Google Chrome 39 in CentOS/RHEL 6 and Fedora 19/18
FROM: http://tecadmin.net/install-google-chrome-in-centos-rhel-and-fedora/ Google Chrome is a freewa ...
- MVC EasyUI 时间格式化
用 return Json(dr, JsonRequestBehavior.AllowGet); 会返回一个json 数据格式,在用 EasyUI 输出表格内容时会遇到时间输出不是我们想要的格式, ...
- How to get the edited text from itext in fabricjs
https://stackoverflow.com/questions/39286826/how-to-get-the-edited-text-from-itext-in-fabricjs http: ...
- 双人对战的球类游戏ios源代码项目
双人对战的球类游戏源代码,这个是一款双人对战的ios球类游戏源代码.游戏的源代码也比較具体的,我们在屏幕上下看到各有一个球门.内有一球,两边通过控制轮盘使球进入对方的球门的.事实上玩法也非常easy的 ...
- python——type()创建类
今天我算是长知识了,我是一个python菜鸟,以前一直认为type(A)可以返回A的类型,但是不知道type还可以用于创建class,这篇经验就是介绍一下如何用type()创建一个类,以及如何设置该类 ...
- axios 处理并发请求
//同时发起多个请求时的处理 axios.all([get1(), get2()]) .then(axios.spread(function (res1, res2) { // 只有两个请求都完成才会 ...