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效果,当然 ...
随机推荐
- UVa10025-The ? 1 ? 2 ? ... ? n = k problem
分析:因为数字之间只有加减变换,所以-k和k是一样的,都可以当成整数来考虑,只要找到最小的n满足sum=n*(n+1)/2>=k:且sum和k同奇同偶即可,做法是用二分查找,然后在就近查找 因为 ...
- [Reprint]C++函数前和函数后加const修饰符区别
c++中关于const的用法有很多,const既可以修饰变量,也可以函数,不同的环境下,是有不同的含义.今天来讲讲const加在函数前和函数后面的区别.比如: 01 #include<iostr ...
- C#: log4net
log4net.dll是apache发布的用来记录log的dll文件 这里举个例子相信大家就知道怎么用了,新建一个console项目,添加log4net.dll后再添加应用程序配置文件 <?xm ...
- haskell笔记1
haskell platform下载:https://www.haskell.org/platform/ 进入haskell控制台,终端输入 $ ghci 编译文件 :l file.hs 数组操作 & ...
- RMAN命令
一.启动.关闭数据库 在RMAN中执行关闭和启动数据库的命令与SQL环境下一模一样.当然,在执行之前,你需要先连接到目标数据库,如例: C:\Documents and Settings\Admini ...
- 【crunch bang】tint2配置2
# Tint2 config file # Background definitions # ID 1 rounded = 0 border_width = 0 background_color = ...
- C语言初学者代码中的常见错误与瑕疵(9)
题目 字母的个数 现在给你一个由小写字母组成字符串,要你找出字符串中出现次数最多的字母,如果出现次数最多字母有多个那么输出最小的那个. 输入:第一行输入一个正整数T(0<T<25) 随后T ...
- 《高质量C++/C编程指南》陷阱 【转】
作者:幻の上帝 出处:http://hi.baidu.com/frankhb1989/item/185f0a14823dd1f8dceeca2c 此文硬伤不少,且相对谭XX的书而言隐晦许多,不建议新手 ...
- Android中的通知—Notification 自定义通知
Android中Notification通知的实现步骤: 1.获取NotificationManager对象NotificationManager的三个公共方法:①cancel(int id) 取消以 ...
- java笔试题: ——将e:/source文件夹下的文件打个zip包后拷贝到f:/文件夹下面
将e:/source文件夹下的文件打个zip包后拷贝到f:/文件夹下面 import java.io.*; import java.util.zip.ZipEntry; import java.uti ...