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

题意很简单a的b次方的因数和对9901取模;

这个题题意很简单,但是看数据量加操作肯定超时,涵盖知识量极多。

1.快速幂:递归求解指数运算。

指数过大无法运算,虽然不知道他们是怎么做的,估计跟这个差不多。

PS

typedef long long LL;
LL power(int a,int b){
LL ans=1;
while(b){
if(p&1) ans=ans*a; /判断是否为奇数(可以%2,按位或&可能快一点)
a=a*a;
b>>=1;
}
return ans;

以2 ^ 8 和2 ^ 9为例,

a=2,b=8;

b是偶数,进行下一步

a=22=4;

b=4;

b是偶数,进行下一步

a=4
4=16:

b=2;

next

a=1616=256

b=1;

next

b是奇数;

ans=1
a=256;

只用了log2n次的乘法;

2.A^B的所有约数之和为:

sum = [1+p1+p12+…+p1 (a1*B)] * [1+p2+p22+…+p2(a2*B)] [1+pn+pn2+…+pn(an*B)].

3.埃氏筛法

直接板子(这里我用了近似的思想,当时还没明白这个方法)

int a[maxx];
int b[maxx+1];
int gg(int n)
{
int p=0;//记录素数个数
for(int i=0;i<n+1;i++)b[i]=1;
b[0]=0;
b[1]=0;
//准备完毕
for(int i=2;i<=n;i++){
if(b[i]){
a[p++]=i;//记录素数和个数
for(int j=2*i;j<=n;j+=i)b[j]=0;//剔除倍数
}
}
return p;//返回素数个数
}
#include <cstdio>
#include <cmath>
#include <cstring>
#include <iostream>
#define MOD 9901
using namespace std;
int a,b,z;
int p[10000]; //质数
int p_n[10000];//质数个数
void Zhi()//质数打表,求小于根号a的质数
{
int t = a;
for (int i=2; i*i<=a; i++)//开方运算比乘法用时间长
{
if (t%i==0)
{
p[z]=i;
p_n[z]=1;
t/=i;
while (t%i==0)
{
p_n[z]++;
t/=i;
}
z++;
}
if (t==1) break;
if (i!=2)
i++;//2.3.5.7.9...
}
if (t!=1)//本身就是质数
{
p[z]=t;
p_n[z]=1;
z++;
}
}
int Mi(int a, int b)//快速幂
{
int res = 1;
a%=MOD;
while(b)
{
if (b&1) res = (res * a)%MOD;
a=(a*a)%MOD;
b>>=1;
}
return res;
}
int Ys(int p , int n)//递归求等比系数
{
if (n==0) return 1;
if (n%2==1)
return ((Mi(p,n/2+1)+1) * Ys(p,n/2))%MOD;
else
return ((1+Mi(p,n/2+1)) * Ys(p,n/2-1) + Mi(p,n/2))%MOD;
}
int main()
{
while (scanf("%d%d",&a,&b)!=EOF)
{
z=0;//质数个数
Zhi();
int ans = 1;
for (int i=0; i<z; i++)
{
ans=(ans*Ys(p[i],p_n[i]*b))%MOD;
}
printf("%d\n",ans);
}
return 0;
}

POJ 1845-Sumdiv(厉害了这个题)的更多相关文章

  1. poj 1845 POJ 1845 Sumdiv 数学模板

    筛选法+求一个整数的分解+快速模幂运算+递归求计算1+p+p^2+````+p^nPOJ 1845 Sumdiv求A^B的所有约数之和%9901 */#include<stdio.h>#i ...

  2. poj 1845 Sumdiv 约数和定理

    Sumdiv 题目连接: http://poj.org/problem?id=1845 Description Consider two natural numbers A and B. Let S ...

  3. POJ 1845 Sumdiv 【二分 || 逆元】

    任意门:http://poj.org/problem?id=1845. Sumdiv Time Limit: 1000MS Memory Limit: 30000K Total Submissions ...

  4. poj 1845 Sumdiv (等比求和+逆元)

    题目链接:http://poj.org/problem?id=1845 题目大意:给出两个自然数a,b,求a^b的所有自然数因子的和模上9901 (0 <= a,b <= 50000000 ...

  5. POJ 1845 Sumdiv#质因数分解+二分

    题目链接:http://poj.org/problem?id=1845 关于质因数分解,模板见:http://www.cnblogs.com/atmacmer/p/5285810.html 二分法思想 ...

  6. POJ 1845 Sumdiv [素数分解 快速幂取模 二分求和等比数列]

    传送门:http://poj.org/problem?id=1845 大致题意: 求A^B的所有约数(即因子)之和,并对其取模 9901再输出. 解题基础: 1) 整数的唯一分解定理: 任意正整数都有 ...

  7. POJ 1845 Sumdiv

    快速幂+等比数列求和.... Sumdiv Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 12599 Accepted: 305 ...

  8. POJ 1845 Sumdiv(逆元)

    题目链接:Sumdiv 题意:给定两个自然数A,B,定义S为A^B所有的自然因子的和,求出S mod 9901的值. 题解:了解下以下知识点   1.整数的唯一分解定理 任意正整数都有且只有唯一的方式 ...

  9. POJ 1845 Sumdiv (整数唯一分解定理)

    题目链接 Sumdiv Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 25841   Accepted: 6382 Desc ...

随机推荐

  1. uni-app的初识(01)

    1.什么是uni-app uni-app 是一个使用 Vue.js 开发所有前端应用的框架, 开发者编写一套代码, 可发布到IOS, Android, H5, 以及各种小程序(微信,百度)等多个平台. ...

  2. Spring XML Bean 定义的加载和注册

    前言 本篇文章主要介绍 Spring IoC 容器怎么加载 bean 的定义元信息. 下图是一个大致的流程图: 第一次画图,画的有点烂.

  3. 中阶d01-- web前端 html css js bootstrap

    html 页面骨架结构css 页面优化js(脚本语言) 页面和用户互动 bootstrap 前端框架,主要实现不同设备直接打开页面时播放比例设置(全屏暂时,不要滚动条)

  4. leetcode 746. Min Cost Climbing Stairs(easy understanding dp solution)

    leetcode 746. Min Cost Climbing Stairs(easy understanding dp solution) On a staircase, the i-th step ...

  5. javascript的数据类型(基本和复杂)

    一.基本数据类型 string number boolean  二.复杂数据类型 Array Date object RegExp Sting Number Boolean 核心:Object fun ...

  6. AJ学IOS 之CoreLocation地理编码小Demo输入城市得到经纬度

    AJ分享,必须精品 一:效果 输入地名,可以得到相应的经纬度,知识为了学习写的小Demo 二:实现步骤 一 :首先获取用户输入的位置. 二 :创建地理编码对象. 三 :利用地理编码对象编码,根据传入的 ...

  7. AJ学IOS(31)UI之Quartz2D图形上下文栈

    AJ分享,必须精品 首先,前面博客说过.qurza2d的上下文中有绘图信息和绘图的属性. 但是他是怎么绘制到上下午中的呢? 我们画图时候一半会用这三个步骤: (1)获取上下文 (2)绘图 (3)渲染 ...

  8. 使用Scanner接受用户键盘输入的值

    第一步导入Scanner import java.util.*; 第二步创建Scanner对象 Scanner input = new Scanner(System.in); 第二步创建Scanner ...

  9. 使用Jmeter测试java请求

    1.性能测试过程中,有时候开发想对JAVA代码进行性能测试,Jmeter是支持对Java请求进行性能测试,但是需要自己开发.打包好要测试的代码,就能在Java请求中对该java方法进行性能测试2.本文 ...

  10. 移动硬盘临时文件太多怎么办,python黑科技帮你解决

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 星安果 PS:如果想了解更多关于python的应用,可以私信我,或者 ...