题目描述

给定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. stl_algorithm算法之排序算法

    排序算法: 注意:容器中必须重载 op< ,排序中stl标准中要求用小于来进行比较. 7.53.sort //全排序. 7.54.stable_sort //稳定排序.两个或两个以上的相邻且相等 ...

  2. 蓝桥杯-兰顿蚂蚁-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  3. Java数据类型(基本数据类型)学习

    Java数据类型(基本数据类型)学习 与其他语言一样,Java编程同样存在,比如int a,float b等.在学习变量之前我就必须先了解Java的数据类型啦. Java的数据类型包括基本数据类型和引 ...

  4. SQL SERVER 的前世今生--各版本功能对比

    背景 今天举办的 Data Amp 大会上,微软向开发者们强调了 数据如何影响他们的应用和服务 ,顺道还宣布了几个小新闻.这个免费的线上研讨会不仅展示了未来的机器学习远景,还发布了 SQL Serve ...

  5. 设置共享目录(主机win7,虚拟机Ubuntu)

    1.安装增强功能包 启动虚拟机后,在 设备 -> 分配光驱 选择VBoxGuestAdditions.iso增强包镜像(在virtualbox安装目录下) 在虚拟机中挂载光驱镜像: #mkdir ...

  6. ⑤JS返回格式化的当前时间和上周时间

    首先对时间进行格式化 返回上周时间和当前时间

  7. win10 64位下装Virtual Box安装Linux(centOS)配置联网

    第一步:安装VritualBox 百度"VritualBox"下载安装即可: 第二步:下载Linux镜像系统并安装 这里写出我参照的博客,很详细,我就不累赘了! 原文地址:http ...

  8. VR市场爆炸-VR全景智慧城市

    随着VR的火爆,越来越多的企业开始关注这种高新技术,也有越来越多VR虚拟现实公司应运而生,但是VR虚拟现实公司真的那么好做吗?虽然VR虚拟现实拥有巨大的市场潜力,但是同时它也非常烧钱,如果VR虚拟现实 ...

  9. 2.Java 加解密技术系列之 MD5

    Java 加解密技术系列之 MD5 序 背景 正文 结束语 序 上一篇文章中,介绍了最基础的编码方式 — — BASE64,也简单的提了一下编码的原理.这篇文章继续加解密的系列,当然也是介绍比较基础的 ...

  10. 022 component(组件)关联映射

    Component关联映射: 目前有两个类如下: 值对象没有标识,而实体对象具有标识,值对象属于某一个实体,使用它重复使用率提升,而且更清析. 以上关系的映射称为component(组件)关联映射 在 ...