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效果,当然 ...
随机推荐
- bzoj4238 电压
首先先直接对图进行二染色,dfs染完色后,有的边为搜索树边,有的为非树边,当非树边连接的两头的点为异色的时候,那么很明显这条非树边和树边构成的环上的边必然不可能成为答案:如果非树边的两端的点同色,那么 ...
- CSS_03_01_CSS类选择器
第01步:编写css样式:class_01.css @charset "utf-8"; /* CSS Document */ div.class01{ background-col ...
- 01---Net基础加强
声明两个变量:int n1 = 10, n2 = 20;要求将两个变量交换,最后输出n1为20,n2为10.交换两个变量,使用第三个变量! class Program { static void Ma ...
- [php] PHPStorm8 for Yincart project
PHPStorm8 license for Yincart project: https://github.com/yinheark/yincart2 User Name: Yincart ===== ...
- 《zw版·Halcon-delphi系列原创教程》 水果自动分类脚本(机器学习、人工智能)
<zw版·Halcon-delphi系列原创教程> 水果自动分类脚本(机器学习.人工智能) 前面介绍了超市,流水线,酸奶的自动分类算法,下面再介绍一个水果的自动分类算法. Halcon强大 ...
- javascript中字符串格式json如何转化成json对象
什么是JSON JSON(JavaScript Object Notation)是一种优美的JavaScript对象创建方法.JSON也是一种轻量级数据交换格式.JSON非常易于人阅读与编写,同时利于 ...
- Openstack的计算节点的nova-network异常中止及实例无法删除排错过程
在预生产环境(172.17.46.2)发现无法删除实例,可以对实例做暂停,恢复操作. 查询原因发现计算节点的nova-network异常 [root@node-12 ~]# /etc/init.d/o ...
- ubuntu下搭建nagios
基本参考 http://nagios.sourceforge.net/docs/3_0/quickstart-ubuntu.html,直接apt-get install的话应该更快.要监控url,参考 ...
- Relative 定位与Absolute 定位实例
一直没有弄懂相对定位与绝对定位之间的关系,今天特来学习一下.本实践都是在360浏览器下测试所得. <!DOCTYPE html> <html> <head> < ...
- 【python cookbook】【数据结构与算法】2 从任意长度的可迭代对象中分解元素
从某个可迭代对象中分解出N个元素,但是可迭代对象的长度可能超过N,会出现“分解值过多”的异常: 使用“*表达式”来解决该问题: Python 3.4.3 (v3.4.3:9b73f1c3e601, F ...