传送门:http://poj.org/problem?id=1845

大致题意:

求A^B的所有约数(即因子)之和,并对其取模 9901再输出。

解题基础:

1) 整数的唯一分解定理

任意正整数都有且只有一种方式写出其素因子的乘积表达式。

,其中为素数

2) 约数和公式

对于已经分解的整数,A的所有因子之和为

3) 同余模公式

(a+b)%m=(a%m+b%m)%m

(a*b)%m=(a%m*b%m)%m

1: 对A进行素因子分解

这里如果先进行筛50000内的素数会爆空间,只能用最朴素的方法进行分解

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

3: 求2中的等比序列

由于给的数据量大,肯定不能直接用等比序列的求和公式,要用分治法进行求解

一直对递归求解

S的下标为偶数类比一下

4:反复平方法计算幂次式

一个快速幂取模的板子,直接套上

#include<iostream>
#include<string.h>
#include<cstdio>
using namespace std;
int p[10000];
int q[10000];
const int mod = 9901;
//快速幂取模板子
long long qucick_pow(int m, int n, int moD)
{
if(n == 0)
return 1;
long long x = qucick_pow(m, n / 2, moD);
long long ans = x * x % mod;
if(n % 2)
ans = ans * m % mod;
return ans;
}
// 递归求解等比数列
long long sum(int m, int n)
{
if(n == 0)
return 1;
if(n % 2)
{
return (sum(m, n / 2) * (1 + qucick_pow(m, n / 2 + 1, mod))) % mod;
}
else
{
return (sum(m, n / 2 - 1) * (1 + qucick_pow(m, n / 2 + 1, mod)) + qucick_pow(m, n / 2, mod)) % mod;
}
}
int main()
{
int a, b;
scanf("%d %d", &a, &b);
int cnt = 0;
for(int i=2;i*i<=a;)
{
if(a%i==0)
{
p[cnt]=i;
while(a%i==0)
{
a/=i;
q[cnt]++;
}
cnt++;
}
if(i==2)
i+=1;
else
i+=2;
}
if(a!=1)
p[cnt]=a,q[cnt++]=1;
long long ans = 1;
for(int i = 0; i < cnt; i++)
{
ans = (ans * (sum(p[i], q[i] * b) % mod)) % mod;
}
cout << ans % mod << endl;
}

POJ 1845 Sumdiv [素数分解 快速幂取模 二分求和等比数列]的更多相关文章

  1. POJ 3233-Matrix Power Series( S = A + A^2 + A^3 + … + A^k 矩阵快速幂取模)

    Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 20309   Accepted:  ...

  2. 快速幂取模(POJ 1995)

    http://poj.org/problem?id=1995 以这道题来分析一下快速幂取模 a^b%c(这就是著名的RSA公钥的加密方法),当a,b很大时,直接求解这个问题不太可能 利用公式a*b%c ...

  3. HDU--杭电--4506--小明系列故事——师兄帮帮忙--快速幂取模

    小明系列故事——师兄帮帮忙 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) To ...

  4. 【转】C语言快速幂取模算法小结

    (转自:http://www.jb51.net/article/54947.htm) 本文实例汇总了C语言实现的快速幂取模算法,是比较常见的算法.分享给大家供大家参考之用.具体如下: 首先,所谓的快速 ...

  5. HDU 1061 Rightmost Digit --- 快速幂取模

    HDU 1061 题目大意:给定数字n(1<=n<=1,000,000,000),求n^n%10的结果 解题思路:首先n可以很大,直接累积n^n再求模肯定是不可取的, 因为会超出数据范围, ...

  6. UVa 11582 (快速幂取模) Colossal Fibonacci Numbers!

    题意: 斐波那契数列f(0) = 0, f(1) = 1, f(n+2) = f(n+1) + f(n) (n ≥ 0) 输入a.b.n,求f(ab)%n 分析: 构造一个新数列F(i) = f(i) ...

  7. POJ3641-Pseudoprime numbers(快速幂取模)

    题目大意 判断一个数是否是伪素数 题解 赤果果的快速幂取模.... 代码: #include<iostream> #include<cmath> using namespace ...

  8. 九度OJ 1085 求root(N, k) -- 二分求幂及快速幂取模

    题目地址:http://ac.jobdu.com/problem.php?pid=1085 题目描述: N<k时,root(N,k) = N,否则,root(N,k) = root(N',k). ...

  9. CodeForces Round #191 (327C) - Magic Five 等比数列求和的快速幂取模

    很久以前做过此类问题..就因为太久了..这题想了很久想不出..卡在推出等比的求和公式,有除法运算,无法快速幂取模... 看到了 http://blog.csdn.net/yangshuolll/art ...

随机推荐

  1. 大数据高可用集群环境安装与配置(08)——安装Ganglia监控集群

    1. 安装依赖包和软件 在所有服务器上输入命令进行安装操作 yum install epel-release -y yum install ganglia-web ganglia-gmetad gan ...

  2. python阴阳鱼绘制(使用turtle)

    from turtle import * def draw(radius ,color1 , color2): #设置画笔的大小 width(3) #设置画笔颜色和填充颜色 color("b ...

  3. soap调用Jar包冲突,SOAPMessageContext

    ================================ ©Copyright 蕃薯耀 2020-01-07 https://www.cnblogs.com/fanshuyao/ soap调用 ...

  4. NCRE的JAVA二级考试大纲

    全国计算机等级考试二级 Java 语言 程序设计考试大纲(2018 年版) 基本要求 1. 掌握 Java 语言的特点.实现机制和体系结构. 2. 掌握 Java 语言中面向对象的特性. 3. 掌握 ...

  5. 吴裕雄--天生自然 JAVASCRIPT开发学习:语句

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. Android进阶——多线程系列之四大线程池的使用介绍

    线程池一直是初学者最抵触的东西,由于刚开始学习做项目并不会涉及到线程池的使用,但是不去学习它,心里又好像有个石头一直沉着,一直放心不下,其实是很简单的东西,早晚都要学,不如趁现在吧.由于文章从初学者的 ...

  7. 冒泡排序_python

    def popdata(ls): for i in range(len(ls)): for j in range(i+1,len(ls)): if ls[i]>ls[j]: # tmp=ls[i ...

  8. mysql5.6免安装使用

    一.去MYSQL官网下载MYSQL免安装版,由于我的系统是64位的,所以就下载了64位的Mysql版本 http://cdn.mysql.com//Downloads/MySQL-5.6/mysql- ...

  9. 82.常用的返回QuerySet对象的方法使用详解:all,select_related

    1. all: 返回这个ORM模型的QuerySet对象. articles = Article.objects.all() print(articles) 2.select_related: 查找数 ...

  10. (2)MongoDB副本集自动故障转移全流程原理

    前文我们搭建MongoDB三成员副本集,了解集群基本特性,今天我们围绕下图聊一聊背后的细节. 默认搭建的replica set均在主节点读写,辅助节点冗余部署,形成高可用和备份, 具备自动故障转移的能 ...