nylg 小M的因子和
小M的因子和
- 描述
-
小M在上课时有些得意忘形,老师想出道题目难住他。小M听说是求因子和,还是非常得意,但是看完题目是求A的B次方的因子和,有些手足无措了,你能解决这个问题吗?
- 输入
- 有多组测试样例
每行两个数 A ,B ,(1≤A,B≤10^9) - 输出
- 输出A的B次方的因子和,并对9901取余。
- 样例输入
-
2 3
- 样例输出
-
15
- 上传者
| Time Limit: 1000MS | Memory Limit: 30000K | |
| Total Submissions: 13547 | Accepted: 3321 |
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).
Source
都是一样的。
/**
这道题,类似于hdu happy 2004.
这题是一个通法。
A^B%P,
拆分A变成素数,因为素数满足因子之和 s(x*y)=s(x)*s(y);
更重要的是,素数的x^n的因子个数是可以求出来的。就是
和(x^n) = 1 + x + x^2 +x^3 +......+x^n; 这样的话,我们就可以轻松解决这样的一个问题了。
提供两种思路。
1 + x + x^2 +x^3 +......+x^n,直接求它对%p的值。运用快速幂也可以的。
这就是第一种方法,也是下面的ac方法。 第二种方法:1 + x + x^2 +x^3 +......+x^n= 等比数列前n+1和。
很据 S(p^X)=1+p+p^2+...+p^X = (p^(X+1)-1)/(p-1);
这样就等于求这个式子了。好的,怎么求呢? p^(X+1)-1 这个应该没有问题,快速幂取模
关键是1/(p-1); 这个不能直接取模。转化为求乘法的逆元。 乘法的逆元??恩。
一开始,我就是这样做的,后来想用费马小定理,联想到了一道题C(n,m)的求法时候
也出现过 n!/(m!*(n-m)!) 对于费马小定理 a%p == a^p-1%p; 那么这样的话,我就能
转化一下,对于 1/(p-1) ,转化为 (p-1)^-1 ==> (p-1)^-1 % mod = (p-1)^mod-2 %mod; 好像这样是对的,是的。
费马小定理的前提是什么? mod是一个素数,这个满足了。
还有一个条件gcd(mod,p-1)==1 这个就不一定了.当p为 mod的倍数+1而且是素数的时候。
就很感慨的发现,p-1就是mod的倍数。
那么费马小定理的路,就不好走了。 那我用扩展欧几里得的算法来求逆元。我看到很多人的解题思路可能都是这个吧。
其实,我依然有一个疑问。
对于(p^(X+1)-1)/(p-1),显然我能对其转化 p%Euler(mod) == t
==> (t ^(x+1)-1)/(t-1); 但是如果 t ^(x+1)%p 为1的时候,这个值就为0了。 例子 A B P
59407 1 9901
**/ #include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdlib>
#include<vector>
using namespace std;
typedef long long LL; const LL p = ;
LL prime[],len;
LL num[];
LL dp[],dlen;
void Euler(LL n)
{
LL i,k;
len=;
for(i=; i*i<=n;i++)
{
if(n%i==){
k=;
while(n%i==){
n=n/i;
k++;
}
prime[++len]=i%p;
num[len]=k;
}
}
if(n!=){
prime[++len]=n%p;
num[len]=;
}
}
LL sum_mod(LL a,LL n)
{
LL ans=;
n=n%p;
while(n)
{
if(n&) ans=(ans+a)%p;
n=n>>;
a=(a+a)%p;
}
return ans;
}
LL solve(LL a,LL n)
{
LL p1=a,p2=a,ans,i;
dlen=;
while(n)
{
dp[++dlen]=(n&);
n=n>>;
}
ans=dlen-;
for(i=ans;i>=;i--)
{
p1=sum_mod(p1,p2+);
p2=sum_mod(p2,p2);
if(dp[i]==)
{
p2=sum_mod(p2,a);
p1=(p1+p2)%p;
}
}
return (p1+)%p;
}
int main()
{
LL n,m,i;
while(scanf("%lld%lld",&n,&m)>)
{
if(n==){
printf("0\n");
continue;
}
else if(m==)
{
printf("1\n");
continue;
}
Euler(n);
LL hxl=;
for(i=;i<=len;i++)
{
hxl=(hxl*solve(prime[i],num[i]*m))%p;
}
printf("%lld\n",hxl);
}
return ;
}
nylg 小M的因子和的更多相关文章
- CF GYM 100703L Many questions
题意:题意真坑……龙要问一系列问题,王子骑士公主分别以一个整数回答,如果王子和公主答案差的绝对值比骑士和公主答案差的绝对值小则说王子和公主的答案更相似,反过来如果前者比后者大则说骑士和公主的答案更相似 ...
- 用C#制作推箱子小游戏
思路分析: 一.制作一个地图 二.地图中放置墙.箱子.人.目标等 三.让小人动起来完成推箱子动作 游戏制作: 1.按照上述地图制作一个地图 (12行×13列) 地图可以看做是行和列组成的,即可以看做 ...
- 数论初步(费马小定理) - Happy 2004
Description Consider a positive integer X,and let S be the sum of all positive integer divisors of 2 ...
- 洛谷P1593 因子和
题目描述 输入两个正整数a和b,求a^b的因子和.结果太大,只要输出它对9901的余数. 输入输出格式 输入格式: 仅一行,为两个正整数a和b(0≤a,b≤50000000). 输出格式: a^b的因 ...
- 胡小兔的 PKUSC2018 游记
Day 0 一番纠结之后,我还是选择了 PKUSC (Penguin Kingdom University Summer Camp, 企鹅王国大学夏令营)! 理由?扔硬币决定的理由如下: PKU好啊 ...
- lesson4-图像分类-小象cv
CNN网络进化:AlexNet->VGG->GoogleNet->ResNet,深度8->19->22->152GoogleNet:Lsplit->trans ...
- 第一个mpvue小程序开发总结
前言 说起小程序,其实在去年我都还只试着照着官方文档写过demo的,不过现在这家公司小程序做得比较多,我来之后也参与了几个小程序的开发了,最开始那几个是用的wepy,最近一个开始转用mpvue开发,最 ...
- hdu 1215(因子和)
七夕节 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- 用RecyclerView做一个小清新的Gallery效果
一.简介 RecyclerView现在已经是越来越强大,且不说已经被大家用到滚瓜烂熟的代替ListView的基础功能,现在RecyclerView还可以取代ViewPager实现Banner效果,当然 ...
随机推荐
- Codeforce Round #224 Div2
一下子没打,这比赛,就被虐成狗!
- 转:python webdriver API 之操作测试对象
一般来说,所有有趣的操作与页面交互都将通过 WebElement 接口,包括上一节中介绍的对象定位,以及本节中需要介绍的常对象操作.webdriver 中比较常用的操作元素的方法有下面几个: cle ...
- 树形DP+二分(Information Disturbing HDU3586)
题意:给出一颗数,1结点代表司令部,叶子节点代表前线,边全值代表花费,然后需要在某些边放置一些炸弹,炸弹的能量不能小于该边的费用,且炸掉的总费用不能超过m问炸弹能力最小多少, 分析dfs+二分,二分枚 ...
- ASP.NET的一般处理程序对数据的基本操作
TableList.ashx: <%@ WebHandler Language="C#" Class="TableList" %> using Sy ...
- Spring 中 Xml配置文件属性的说明
Xml配置文件属性的说明: <bean id="TheAction" ⑴ class="net.xiaxin.spring.qs.UpperAction" ...
- struts_20_对Action中所有方法、某一个方法进行输入校验(基于XML配置方式实现输入校验)
第01步:导包 第02步:配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app ...
- Spark K-Means
K-Means(K均值) 介绍 K-Means是被应用的最广泛的基于划分的聚类算法,是一种硬聚类算法,属于典型的局域原型的目标函数聚类的代表.算法首先随机选择k个对象,每个对象初始地代表一个簇的平均值 ...
- 同时启动多个Tomcat
一,修改配置文件server.xml的端口 C:\apache-tomcat-5.5.23-1\conf\server.xml用记事本什么的打开修改3个地方 第一: <Server port ...
- 【DP】斜率优化
斜率优化 入门题:PKU3709 很多人貌似都是做这道题来K斜率优化的,所以看了资料以后还是开始入手吧. 然而还是得跪求大神的程序啊 ORZ ORZ…… 其实理解斜率优化就是会列斜率不等式,还要理解剔 ...
- 【python cookbook】【数据结构与算法】20.将多个映射合并为单个映射
问题:在逻辑上将多个字典或映射合并为一个单独的映射结构,以此执行某些特定的操作,比如查找值或者检查键是否存在 解决方案:利用collections模块中的ChainMap类 ChainMap可接受多个 ...