nylg 小M的因子和

小M的因子和

时间限制:1000 ms  | 
内存限制:65535 KB

难度:2


描述


小M在上课时有些得意忘形,老师想出道题目难住他。小M听说是求因子和,还是非常得意,但是看完题目是求A的B次方的因子和,有些手足无措了,你能解决这个问题吗?


输入

有多组测试样例
每行两个数 A ,B ,(1≤A,B≤10^9) 

输出

输出A的B次方的因子和,并对9901取余。

样例输入

2 3

样例输出

15

上传者






Sumdiv










Time Limit: 1000MS   Memory Limit: 30000K
Total Submissions: 13547   Accepted: 3321

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).

Source

都是一样的。


  1 /**
2 这道题,类似于hdu happy 2004.
3 这题是一个通法。
4 A^B%P,
5 拆分A变成素数,因为素数满足因子之和 s(x*y)=s(x)*s(y);
6 更重要的是,素数的x^n的因子个数是可以求出来的。就是
7 和(x^n) = 1 + x + x^2 +x^3 +......+x^n;
8
9 这样的话,我们就可以轻松解决这样的一个问题了。
10 提供两种思路。
11 1 + x + x^2 +x^3 +......+x^n,直接求它对%p的值。运用快速幂也可以的。
12 这就是第一种方法,也是下面的ac方法。
13
14 第二种方法:1 + x + x^2 +x^3 +......+x^n= 等比数列前n+1和。
15 很据 S(p^X)=1+p+p^2+...+p^X = (p^(X+1)-1)/(p-1);
16 这样就等于求这个式子了。好的,怎么求呢?
17
18 p^(X+1)-1 这个应该没有问题,快速幂取模
19 关键是1/(p-1); 这个不能直接取模。转化为求乘法的逆元。
20
21 乘法的逆元??恩。
22 一开始,我就是这样做的,后来想用费马小定理,联想到了一道题C(n,m)的求法时候
23 也出现过 n!/(m!*(n-m)!) 对于费马小定理 a%p == a^p-1%p; 那么这样的话,我就能
24 转化一下,对于 1/(p-1) ,转化为 (p-1)^-1 ==> (p-1)^-1 % mod = (p-1)^mod-2 %mod;
25
26 好像这样是对的,是的。
27 费马小定理的前提是什么? mod是一个素数,这个满足了。
28 还有一个条件gcd(mod,p-1)==1 这个就不一定了.当p为 mod的倍数+1而且是素数的时候。
29 就很感慨的发现,p-1就是mod的倍数。
30 那么费马小定理的路,就不好走了。
31
32 那我用扩展欧几里得的算法来求逆元。我看到很多人的解题思路可能都是这个吧。
33 其实,我依然有一个疑问。
34 对于(p^(X+1)-1)/(p-1),显然我能对其转化 p%Euler(mod) == t
35 ==> (t ^(x+1)-1)/(t-1); 但是如果 t ^(x+1)%p 为1的时候,这个值就为0了。
36
37
38 例子 A B P
39 59407 1 9901
40 **/
41
42 #include<iostream>
43 #include<stdio.h>
44 #include<cstring>
45 #include<cstdlib>
46 #include<vector>
47 using namespace std;
48 typedef long long LL;
49
50 const LL p = 9901;
51 LL prime[1000],len;
52 LL num[1000];
53 LL dp[100],dlen;
54 void Euler(LL n)
55 {
56 LL i,k;
57 len=0;
58 for(i=2; i*i<=n;i++)
59 {
60 if(n%i==0){
61 k=0;
62 while(n%i==0){
63 n=n/i;
64 k++;
65 }
66 prime[++len]=i%p;
67 num[len]=k;
68 }
69 }
70 if(n!=1){
71 prime[++len]=n%p;
72 num[len]=1;
73 }
74 }
75 LL sum_mod(LL a,LL n)
76 {
77 LL ans=0;
78 n=n%p;
79 while(n)
80 {
81 if(n&1) ans=(ans+a)%p;
82 n=n>>1;
83 a=(a+a)%p;
84 }
85 return ans;
86 }
87 LL solve(LL a,LL n)
88 {
89 LL p1=a,p2=a,ans,i;
90 dlen=0;
91 while(n)
92 {
93 dp[++dlen]=(n&1);
94 n=n>>1;
95 }
96 ans=dlen-1;
97 for(i=ans;i>=1;i--)
98 {
99 p1=sum_mod(p1,p2+1);
100 p2=sum_mod(p2,p2);
101 if(dp[i]==1)
102 {
103 p2=sum_mod(p2,a);
104 p1=(p1+p2)%p;
105 }
106 }
107 return (p1+1)%p;
108 }
109 int main()
110 {
111 LL n,m,i;
112 while(scanf("%lld%lld",&n,&m)>0)
113 {
114 if(n==0){
115 printf("0\n");
116 continue;
117 }
118 else if(m==0)
119 {
120 printf("1\n");
121 continue;
122 }
123 Euler(n);
124 LL hxl=1;
125 for(i=1;i<=len;i++)
126 {
127 hxl=(hxl*solve(prime[i],num[i]*m))%p;
128 }
129 printf("%lld\n",hxl);
130 }
131 return 0;
132 }

时间: 2024-12-13 12:48:59

nylg 小M的因子和的相关文章

花生棒2代的另类玩法 — 万能的棒子,带我穿越另一个网络吧

花生棒1代我是原价298元买的 ,何止用坑爹来表达我的愤怒 ,3个月后的参活动,花生棒2代只要98元(只有298的零头),而且还赠送了一个品胜电源(在京东要37元). 我们来看看这个所谓的2代和1代到底有什么差异性,从包装上来说除了型号跟一代的不同,其他细节完全一样.花生棒的盒子比较小巧,手掌心这么大,盒子的做工还算不错.打开盒子后,发现多了一个说明书,1代不知道是不是为了耍酷 ,连纸张的说明书都没有,仅仅在盒子的四周印上了快速指南,我从设计者的角度理解,算是一种比较有意思的创新,但这种方式传递

CF GYM 100703L Many questions

题意:题意真坑……龙要问一系列问题,王子骑士公主分别以一个整数回答,如果王子和公主答案差的绝对值比骑士和公主答案差的绝对值小则说王子和公主的答案更相似,反过来如果前者比后者大则说骑士和公主的答案更相似,相等则忽略. 解法:水题……读题读了好久……one of Prince's and Princess'怎么就是公主和王子答案的差了…… 代码: #include<stdio.h> #include<iostream> #include<algorithm> #includ

轻院 2177 小姐姐的忠告:少吃辣条多刷题

题目链接:https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=2177 题目大意:n个球放入n个箱子中,每个箱子放一个.每个球都是独一无二的,问方案数能被最大2的几次方整除. 解题思路:很明显方案数目就是n!,而所求的实际上是2~n中每个数的中有几个2.显然奇数可忽略,对于1~n的所有偶数来说,一次除二之后所有数都缩小了一半,即相当于求1~n/2的所有偶数,反复如此,可以很快得到思路. 代码: 1 const int inf = 0x3f3f3f3f

数论初步(费马小定理) - Happy 2004

Description Consider a positive integer X,and let S be the sum of all positive integer divisors of 2004^X. Your job is to determine S modulo 29 (the rest of the division of S by 29). Take X = 1 for an example. The positive integer divisors of 2004^1

hdu 1215(因子和)

七夕节 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 40119    Accepted Submission(s): 12613 Problem Description 七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!"人们纷纷来到告示

用C#制作推箱子小游戏

思路分析: 一.制作一个地图 二.地图中放置墙.箱子.人.目标等 三.让小人动起来完成推箱子动作 游戏制作: 1.按照上述地图制作一个地图  (12行×13列) 地图可以看做是行和列组成的,即可以看做是由二维数组组成的 2.实体化:将0转换为空格,1转换为黑色方块 3.设置箱子.人.目标点 4.先让小人动起来,实现小人向上移动,因为坐标的交换,所以箱子向下移动了,同理,改变坐标可以实现向左.向下.向右移动 向下移动:y+1;向左移动:x-1;向右移动:x+1; 5.实现推箱子,以向上移动为例,其

NYOJ 928 小M的因子和(数论)

小M的因子和 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 小M在上课时有些得意忘形,老师想出道题目难住他.小M听说是求因子和,还是非常得意,但是看完题目是求A的B次方的因子和,有些手足无措了,你能解决这个问题吗? 输入 有多组测试样例 每行两个数 A ,B ,(1≤A,B≤10^9)  输出 输出A的B次方的因子和,并对9901取余. 样例输入 2 3 样例输出 15 分析:对A进行质因数分解,假设A = (p1^a1) * (p2^a2)*--*(pk^ak)

小猎记事-玖篇

晚上那个好呀,可爱的小狮子们~       小女子今天见了一位非常不错的候选人,虽然不是我这个方向(做JAVA)的,但是人家回答问题总结经验的时候那叫一个行云流水啊,什么时候我才能碰到我的纯金MPC啊,想想都觉得比等心上人还要激动~       今天晚上小女子和同事约了去逛咳咳,某某大楼,保不齐就和你们擦肩而过了,缘分这种东西啊,顺其自然吧~       分享正式开始,请听题:对你事业有帮助的11条“潜规则”---通往leader岗的最佳途径       多数人做着“还行”的工作,但其他人在“工

小程序员日记5

男人姐们儿 男人 —— 只是个称呼.实际她是个纯姐们儿.我得承认,她比我酷比我潮比我有男人味. 我们学校和计算机专业有关的大约有三个学院.计算机学院,软件学院还有一个信息管理学院也有计算机专业.这么说有点复杂,但是观客事实就是这样.计算机学院和软件学院是一家人,师生队伍都是一套人马.基至在学校课程上大一大二的科目都所差不无,变化是在大三.大三的时候软件的学生侧重点明显有了变化.如果说计算机和软件两个学院还是同门不管派的话那和信管比好就完全是两门两派的事,大家分别在不同的院系上,基本上毫无交集.我