题目描述

给定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. ETL开发面试问题加吐槽加职业发展建议

    写在前面: 作为甲方,对于乙方派来的开发人员,我是会自己面一下.总体来说遇到的水平不一,于是经过这三年多的面(cui)试(can),总结了一套自己的面试套路,中间也遇到过很多想吐槽的东西,于是大概记录 ...

  2. 详细解剖大型H5单页面应用的核心技术点

    项目 Xut.js 阐述下开发中一个比较核心的优化技术点,这是一套平台代码,并非某一个插件功能或者框架可以直接拿来使用,核心代码大概是6万行左右(不包含任何插件) .这也并非一个开源项目,不能商业使用 ...

  3. arcgis属性选取like用法

    查询对象为ArcInfo coverage,shapefile, INFO table,dBASE table,ArcSDE data,ArcIMS 要素类,或者 ArcIMS image servi ...

  4. SVN提交后自动推送消息到钉钉群

    钉钉设置机器人配置 1.进入配置机器人入口 2.添加机器人 3.测试WebHook请求 本人使用Postman进行测试 4.配置SVN 4.1 配置 Pre-commit hook 设置提交内容必须包 ...

  5. java下蛇形回环矩阵的实现

    前文废话:这个问题据说是腾讯之前的一道笔试题,由于当时没认真看,现在记不清这种矩阵是不是叫"蛇形回环矩阵"......请大家直接看图1,就是那个样子的矩阵. 问题描述:输入一个N, ...

  6. Oracle的substr函数

    一.Substr函数 substr(目标字符串,开始位置,长度) 注意:这里第三个参数:长度,相当于物理中的标量,没有方向性,所以不能用负值.虽然不报错,但是选择不出任何值出来(欢迎指正) 开始位置可 ...

  7. hdu3709 Balanced Number 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3709 题目大意就是求给定区间内的平衡数的个数 要明白一点:对于一个给定的数,假设其位数为n,那么可以有 ...

  8. 读《Java并发编程的艺术》(一)

    离开博客园很久了,自从找到工作,到现在基本没有再写过博客了.在大学培养起来的写博客的习惯在慢慢的消失殆尽,感觉汗颜.所以现在要开始重新培养起这个习惯,定期写博客不仅是对自己学习知识的一种沉淀,更是在督 ...

  9. 分布式服务:Dubbo+Zookeeper+Proxy+Restful 分布式架构

    分布式 分布式服务:Dubbo+Zookeeper+Proxy+Restful 分布式消息中间件:KafKa+Flume+Zookeeper 分布式缓存:Redis    分布式文件:FastDFS ...

  10. C# MVC权限验证

    前言 之前一直没怎么接触过权限验证这块,刚好公司老平台改版,就有了这篇权限验证.此篇文章大致讲解下 精确到按钮级别的验证如何实现.以及权限验证设计的参考思路(菜鸟一枚,大神勿喷). 在开发大项目的时候 ...