题目描述

给定A,B,求A^B的所有因数的和,再MOD 9901

输入

一行两个整数 A 和 B。

输出

一行,一个整数

样例输入

2 3

样例输出

15

提示

对于100%的数据满足:0 <= A,B <= 50000000

这道题首先要想到有一个因数和公式

f[a] = ( 1 + p1 + p1^2 + .... + p1^q1 ) * ( 1 + p2 + p2^2 + .... + p2^q2 ) * ...... * ( 1 + pn + pn^2 +.....+ pn^qn )

由此我们知道,这道题需要分解质因数(唯一分解定理???

A^B可以直接分A,每个分出数的指数再×B就行(这应该都会

所以我们可以先打个素数表..

因为a,b都在50000000,计算器一算7000多的表就够了..

我们再观察因数和公式,如果一个一个求救太麻烦了,我们就发现了这是等比数列啊!!!

等比数列公式相信大家都会...

因为除数可能为负数,所以式子要上下都×-1整理一下

但这又有可能出现不是整数的情况,我们就需要用乘法逆元了(当时我卡在这了

这里先贴一个写的挺好的乘法逆元

inline long long extend_gcd(long long a,long long b,long long &x,long long &y)
{
if(a==&&b==)
return -1ll;
if(b==)
{
x=1ll;
y=0ll;
return a;
}
long long d=extend_gcd(b,a%b,y,x);
y-=a/b*x;
return d;
}
inline long long mod_reverse(long long a,long long n)
{
long long x,y,d=extend_gcd(a,n,x,y);
if(d==)
return (x%n+n)%n;
else
return -1ll;
}

快速幂和乘法取模就不说了

下面贴代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define ll long long
ll vis[]={};
ll ys[]={},zs[]={};
ll vis1[]={};
ll ac[]={};
using namespace std;
ll n;
ll qmod(ll i,ll j)
{
ll ans=;
while(j)
{
if(j&)
{
ans*=i;
ans%=;
}
i=i*i%;
j>>=;
}
return ans%;
}
void prime()
{
ll i,j,k=;
for(i=;i<=;i++)
{
vis[i]=i;
}
i=;
while(i*i<=)
{
if(vis[i]!=)
{
j=i<<;
while(j<=)
{
if(vis[j]!=)
{
k++;
}
vis[j]=;
j=j+i;
}
}
i++;
}
}
int main()
{
ll k=;
ll i,j;
ll A,b;
ll a,n;
cin>>a>>b;
A=a;
n=sqrt(a);
prime();
for(i=;i<=n;i++)
{
while((vis[i]!=)&&(a%vis[i]==))
{
vis1[i]=;
ys[k]=vis[i]%;
zs[k]++;
a=a/vis[i];
}
if(vis1[i]==)
{
k++;
}
}
k--;
ll step=;
ll re=,cf=;
if(a!=&&a!=A)
{
ys[k+]=a%;
zs[k+]=;
step=;
}
else
if(a==A)
{
ys[]=a%;
zs[]=;
k=;
}
if(step==)
{
k++;
}
ll count=;
for(i=;i<=k;i++)
{
if(zs[i]!=)
{
zs[i]=zs[i]*b;
count++;
}
}
for(i=;i<=count;i++)
{
ll a1=qmod(ys[i]%,zs[i]+);
a1=a1-;
ll temp=(ys[i]-)%;
ll a2=qmod(temp,);
ac[i]=((a1%)*(a2%))%;
}
ll sum=ac[];
for(i=;i<=count;i++)
{
sum=((sum%)*(ac[i]%))%;
}
cout<<sum;
}

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 (数论)

    题目链接 题意:求 A^B的所有约数之和对9901取模后的结果. 分析: 看了小优的博客写的. 分析来自 http://blog.csdn.net/lyy289065406/article/detai ...

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

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

  4. poj 1845 Sumdiv 约数和定理

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

  5. poj 1845 Sumdiv(约数和,乘法逆元)

    题目: 求AB的正约数之和. 输入: A,B(0<=A,B<=5*107) 输出: 一个整数,AB的正约数之和 mod 9901. 思路: 根据正整数唯一分解定理,若一个正整数表示为:A= ...

  6. POJ 1845 Sumdiv(求因数和 + 逆元)题解

    题意:给你a,b,要求给出a^b的因子和取模9901的结果. 思路:求因子和的方法:任意A = p1^a1 * p2^a2 ....pn^an,则因子和为sum =(1 + p1 + p1^2 + . ...

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

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

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

  10. 【POJ1845】Sumdiv(数论/约数和定理/等比数列二分求和)

    题目: POJ1845 分析: 首先用线性筛把\(A\)分解质因数,得到: \[A=p_1^{a_1}*p_2^{a_2}...*p_n^{a_n} (p_i是质数且a_i>0) \] 则显然\ ...

随机推荐

  1. fstream 学习

    #include <fstream> 引用:http://blog.csdn.net/qiang60125/article/details/5949750(fstream 常用方法详解) ...

  2. python3 selenium 如何处理异常情况

    使用场景: 1.元素只有在某一特定情况下才会出现 2.元素定位不到 使用方法: try: except exceptions.NoSuchElementException: 举例说明: # _._ c ...

  3. 如何在Linux实现自动运行程序

    1.开机启动时 Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init. init根据配置文件继续引导过程,启动其它进程.通常情况下,修改放置在 /etc/rc或 /etc/rc. ...

  4. HDFS 架构简述

    HDFS 架构简述 Hadoop分布式文件系统(HDFS)是一个分布式的文件系统,运行在廉价的硬件上.它与现有的分布式文件系统有很多相似之处.然而与其他的分布式文件系统的差异也是显着的.HDFS是高容 ...

  5. JDK源码之AQS源码剖析

    除特别注明外,本站所有文章均为原创,转载请注明地址 AbstractQueuedSynchronizer(AQS)是JDK中实现并发编程的核心,平时我们工作中经常用到的ReentrantLock,Co ...

  6. JVM方法调用

    当我们站在JVM实现的角度去看方法调用的时候,我们自然会想到一种分类: 1.编译代码的时候就知道是哪个方法,永远不会产生歧义,例如静态方法,private方法,构造方法,super方法. 2.运行时才 ...

  7. 瀑布流布局使用详解——JQuery插件Isotope(动态实现子项目筛选)

    瀑布流布局,听起来听牛逼的样子,其实就是简单的子元素筛选功能.不过这一功能在网站页面布局当中还是很常用的,特别是在电商网站中 经常会有点一个钮筛选,然后页面的子元素刷的以下变了样.接下来,我们先简单介 ...

  8. Day1-模块初识

    模块,也叫库,分为标准库和第三方库.标准库,直接导入使用,比如import getpass:第三方库,需下载安装才能使用,比如paramiko: 一.sys模块 import sys print(sy ...

  9. JVM学习笔记二:JVM参数

    所有线程共享的内存主要有两块:堆内存和方法区. 其中堆内存分为两块:新生代Young generation(Eden区.From Survivor区.To Survivor区).老年代Tenured ...

  10. Java中 EvenQueue.invokeLater用法

    在Java中Swing是线程不安全的,是单线程的设计,这样的造成结果就是:只能从事件派发线程访问将要在屏幕上绘制的Swing组件.事件派发线程是调用paint和update等回调方法的线程,它还是事件 ...