POJ 1845-Sumdiv 题解(数论,约数和公式,逆元,高中数学)
题目描述
给定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 题解(数论,约数和公式,逆元,高中数学)的更多相关文章
- poj 1845 POJ 1845 Sumdiv 数学模板
筛选法+求一个整数的分解+快速模幂运算+递归求计算1+p+p^2+````+p^nPOJ 1845 Sumdiv求A^B的所有约数之和%9901 */#include<stdio.h>#i ...
- poj 1845 Sumdiv (数论)
题目链接 题意:求 A^B的所有约数之和对9901取模后的结果. 分析: 看了小优的博客写的. 分析来自 http://blog.csdn.net/lyy289065406/article/detai ...
- POJ 1845 Sumdiv [素数分解 快速幂取模 二分求和等比数列]
传送门:http://poj.org/problem?id=1845 大致题意: 求A^B的所有约数(即因子)之和,并对其取模 9901再输出. 解题基础: 1) 整数的唯一分解定理: 任意正整数都有 ...
- poj 1845 Sumdiv 约数和定理
Sumdiv 题目连接: http://poj.org/problem?id=1845 Description Consider two natural numbers A and B. Let S ...
- poj 1845 Sumdiv(约数和,乘法逆元)
题目: 求AB的正约数之和. 输入: A,B(0<=A,B<=5*107) 输出: 一个整数,AB的正约数之和 mod 9901. 思路: 根据正整数唯一分解定理,若一个正整数表示为:A= ...
- POJ 1845 Sumdiv(求因数和 + 逆元)题解
题意:给你a,b,要求给出a^b的因子和取模9901的结果. 思路:求因子和的方法:任意A = p1^a1 * p2^a2 ....pn^an,则因子和为sum =(1 + p1 + p1^2 + . ...
- POJ 1845 Sumdiv 【二分 || 逆元】
任意门:http://poj.org/problem?id=1845. Sumdiv Time Limit: 1000MS Memory Limit: 30000K Total Submissions ...
- POJ 1845 Sumdiv(逆元)
题目链接:Sumdiv 题意:给定两个自然数A,B,定义S为A^B所有的自然因子的和,求出S mod 9901的值. 题解:了解下以下知识点 1.整数的唯一分解定理 任意正整数都有且只有唯一的方式 ...
- POJ 1845 Sumdiv (整数唯一分解定理)
题目链接 Sumdiv Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 25841 Accepted: 6382 Desc ...
- 【POJ1845】Sumdiv(数论/约数和定理/等比数列二分求和)
题目: POJ1845 分析: 首先用线性筛把\(A\)分解质因数,得到: \[A=p_1^{a_1}*p_2^{a_2}...*p_n^{a_n} (p_i是质数且a_i>0) \] 则显然\ ...
随机推荐
- ORB_SLAM2之Pangolin的安装与问题处理
前言 本篇博客中,我们主要介绍了在安装ORB_SLAM2所需的第三方库Pangolin的过程中遇到的一些问题及解决方法. 1.Pangolin是什么? Pangolin是一个用于OpenGL显示/交互 ...
- jquery实现网页倒计时
在毕设作品考试模块要做个倒计时,当时间到时自动结束答题.于是在jQuery插件社区找到一个简洁明了的倒计时.先上效果图. 感谢作者hacker(这是黑客的意思么),贴上地址:http://www.jq ...
- Yomob广告在cocos2dx安卓平台的Demo
Yomob 也是一个广告平台:他的使用方式比较简单哈,这里只说说他的步骤 按照官方文档说明配置环境,我使用的是eclipse,在eclipse上自己将文件copy到项目proj.android下,覆盖 ...
- sql注入基础(原理)
一.注入的分类 按数据库分类:1.整形 2.字符型(需要考虑单引号闭合的问题,还有注释不必要的语句 # ) eag: id='admin' id='admin and1=1'这样会报错 所以 ...
- JAVA内存模型与线程
概述 由于计算机的运算速度和它的存储和通讯子系统的速度差距巨大,大部分时间都花在IO,网络和数据库上.为了压榨CPU的运算能力,需要并发.另外,优秀的并发程序对于提高服务器的TPS有重要的意义. 硬件 ...
- String深度解析
文章出处:http://my.oschina.net/xiaohui249/blog/170013 一.引题 String类型是比较特殊的一种类型,同时也是面试经常被问到的一个知识点,本文结合java ...
- Hibernate原理
Hibernate使用基本上会,但是却一直不知道Hibernate内部是怎么工作的 什么是Hibernate? Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象 ...
- 对类对象使用new时地址分配的情况
我们知道,string类内部的构造函数是采用new来分配地址的.当创建对象时,会调用string的构造函数,从而实质上也使用了new.那么问题来了,如果我用new再创建一个string类型的指针呢?下 ...
- 【CSS Cookbook】笔记摘要(一)
概要 CSS的优点:将表现和内容相分离:更好地控制页面布局:大大减少了文件尺寸:缩短了改版时间:提高了易用性. CSS全称层叠式样表(Cascading Style Sheets). 1.问题:如何最 ...
- excel vba 实现跨表单(sheet) 搜索 - 显示搜索行记录搜索历史
前两天,一个朋友问我,有没有办法在excel里实现一个表单里是原始数据,在另一个表单里显示搜索到的行,搜索关键词可用~分隔开,并把搜索历史记录下来? 我想了想,用vba实现肯定可以啊,但是我又在想,有 ...