博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1845, Sumdiv
阅读量:6579 次
发布时间:2019-06-24

本文共 1702 字,大约阅读时间需要 5 分钟。

Time Limit: 1000MS  Memory Limit: 30000K

Total Submissions: 4943  Accepted: 1047

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

Romania OI 2002


//
 POJ1845.cpp : Defines the entry point for the console application.
#include 
<
iostream
>
using
 
namespace
 std;
#define
 M 9901
#define
 MAX 10000
long
 
long
 pow(
long
 
long
 x,
long
 
long
 n)
{
    
long
 
long
 ret
=
1
,s
=
x;
    
while
 (
true
)
    {
        
if
 (n 
&
 
1
) ret 
=
 ((ret 
%
 M) 
*
 (s 
%
 M)) 
%
 M;
        
if
 (n
>>=
1
) s 
=
 ((s 
%
 M) 
*
 (s 
%
 M)) 
%
 M;
        
else
 
break
;
    }
    
return
 ret;
}
long
 
long
 sum(
long
 
long
 p,
long
 
long
 n)
{
    
if
(n 
==
 
0
)
        
return
 
1
;
    
if
(n 
&
 
1
)
        
return
 (((
1
+
pow(p,n
/
2
+
1
)) 
%
 M) 
*
 (sum(p,n
/
2
%
 M)) 
%
 M;
    
else
        
return
 (((
1
+
pow(p,n
/
2
+
1
)) 
%
 M) 
*
 (sum(p,(n
-
1
)
/
2
%
 M) 
+
 pow(p,n
/
2
%
 M) 
%
 M;
}
int
 main(
int
 argc, 
char
*
 argv[])
{
    
int
 A,B;
    
int
 p[MAX],c[MAX];
    memset(p, 
0
sizeof
(p));
    memset(c, 
0
sizeof
(c));
    cin
>>
A
>>
B;
    
for
(
int
 i 
=
 
2
;i 
*
 i 
<=
 A;
++
i)
    {
        
if
(A 
%
 i 
==
 
0
)
        {
            p[
++
p[
0
]] 
=
 i;
            
while
(A 
%
 i 
==
 
0
)
            {    
                A 
/=
 i;
                
++
c[p[
0
]];
            }
        }
    }
    
if
(A 
!=
 
1
)
    {
        p[
++
p[
0
]] 
=
 A;
        c[p[
0
]] 
=
 
1
;
    }
    
long
 
long
 res
=
1
;
    
for
(
int
 i 
=
 
1
;i 
<=
 p[
0
]; 
++
i)
    {
        res 
=
 ((res 
%
 M) 
*
 (sum(p[i],B 
*
 c[i]) 
%
 M)) 
%
 M;
    }
    cout
<<
res
<<
endl;
    
return
 
0
;
}

转载于:https://www.cnblogs.com/asuran/archive/2009/10/24/1588960.html

你可能感兴趣的文章
使用反射获取Android中隐藏的方法
查看>>
PHP开发者常犯的10个MySQL错误
查看>>
计算图像相似度——《Python也可以》之一(转)
查看>>
Go编程语言规范2-类型
查看>>
对比shrink和move
查看>>
C# Compiler Options
查看>>
Linux学习之CentOS(十七)--与Linux文件和目录管理相关的一些重要命令①
查看>>
The Perfect Stall(二分图匹配,最大流EK算法)
查看>>
字符串处理
查看>>
know you with a highschool
查看>>
类对象VB.NET面向对象设计
查看>>
MS SQL 模仿ORACLE的DESC
查看>>
对淘宝一些规则的一些研究分享
查看>>
WAV格式
查看>>
信号量(一)
查看>>
开发前奏曲之添加Android SDK平台工具
查看>>
poj 2263&& zoj1952 floyd
查看>>
Django跨站伪造请求保护措施设置方法[转]
查看>>
关掉firefox(火狐)和palemoon地址栏自动加www.前缀功能【转】
查看>>
hdu 4300 Clairewd’s message(KMP)
查看>>