POJ 1845 Sumdiv (数学,乘法逆元)
题意:
给出数字A和B,要求AB的所有因子(包括AB和1)之和 mod 9901 的结果。
思路:
即使知道公式也得推算一阵子。
很容易知道,先把分解得到
,那么得到
,那么
的所有因子之和的表达式如下:
我们要做的就是计算出sum%9901的结果。
有两种方法:
(1)直接用快速幂计算对上面sum的第一步推算求结果,在计算过程中顺便取模。
(2)可以根据以下这条公式对上面sum的第二步推算求结果:
也是需要用到快速幂,过程也稍微复杂了些。注意 mb 可能会超过int。
以下是第二种方法的代码:
//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <algorithm>
#include <vector>
#include <iostream>
#define pii pair<int,int>
#define INF 0x3f3f3f3f
#define LL unsigned long long
using namespace std;
const double PI = acos(-1.0);
const int N=;
const LL mod=;
bool isPrime[N];
LL p[N]; //素数表 int get_all_prime(int n) //筛法求所有[0~n)素数,返回素数表大小
{
memset(isPrime, , sizeof(isPrime));
int cnt=;
for(int i=; i<n; i++)
{
if(!isPrime[i]) continue;
p[cnt++]=i;
for(int j=i*i; j<n; j+=i) isPrime[j]=;
}
return cnt;
} LL _mul(LL a,LL b,LL mod) //a*b要用加法形式运算才不会溢出
{
a%=mod;
LL r=; //结果
while( b )
{
if( b& ) r=(r+a)%mod;
a=(a+a)%mod;
b>>=;
}
return r;
} LL pow(LL a,LL b,LL mod) //快速幂函取模
{
a%=mod;
LL r=; //结果
while( b )
{
if( b& ) r=_mul(r,a,mod);
a=_mul(a,a,mod);
b>>=;
}
return r;
} LL cal(LL A,LL B)
{
LL ans=;
for(int i=; p[i]*p[i]<=A; i++ ) //先求A的所有质因子
{
if(A%p[i]==)
{
int cnt=;
while(A%p[i]==) //全部取光
{
cnt++;
A/=p[i];
}
LL mb=mod*(p[i]-);
ans*=(pow(p[i], cnt*B+, mb)+mb-)%mb/(p[i]-) ; //要防止出现负数
ans%=mod;
}
} if(A>)
{
//如果没有把A成功分解,那么必定是个质数。
//其实也可以写在上面那一步中,只是复杂度就会稍高了。
LL mb=mod*(A-);
ans*=(pow(A, B+, mb)+mb-)%mb/(A-) ; //要防止出现负数
ans%=mod;
} return ans;
} int main()
{
//freopen("input.txt", "r", stdin);
get_all_prime(N);
int A, B;
while(~scanf("%d%d",&A,&B))
printf("%lld\n", cal(A,B) );
return ;
}
AC代码
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 【二分 || 逆元】
任意门:http://poj.org/problem?id=1845. Sumdiv Time Limit: 1000MS Memory Limit: 30000K Total Submissions ...
- poj 1845 Sumdiv(约数和,乘法逆元)
题目: 求AB的正约数之和. 输入: A,B(0<=A,B<=5*107) 输出: 一个整数,AB的正约数之和 mod 9901. 思路: 根据正整数唯一分解定理,若一个正整数表示为:A= ...
- poj 1845 【数论:逆元,二分(乘法),拓展欧几里得,费马小定理】
POJ 1845 题意不说了,网上一大堆.此题做了一天,必须要整理一下了. 刚开始用费马小定理做,WA.(poj敢说我代码WA???)(以下代码其实都不严谨,按照数据要求A是可以等于0的,那么结果自然 ...
- 【题解】POJ1845 Sumdiv(乘法逆元+约数和)
POJ1845:http://poj.org/problem?id=1845 思路: AB可以表示成多个质数的幂相乘的形式:AB=(a1n1)*(a2n2)* ...*(amnm) 根据算数基本定理可 ...
- POJ 1845 Sumdiv(因子分解+快速幂+二分求和)
题意:给你A,B,让求A^B所有的因子和模上9901 思路:A可以拆成素因子的乘积: A = p1^x1 * p2^x2 *...* pn^xn 那么A^B = p1^(B*x1) * p2^(B*x ...
- POJ 1845 Sumdiv (整数拆分+等比快速求和)
当我们拆分完数据以后, A^B的所有约数之和为: sum = [1+p1+p1^2+...+p1^(a1*B)] * [1+p2+p2^2+...+p2^(a2*B)] *...*[1+pn+pn^2 ...
- POJ1845 Sumdiv 数学?逆元?
当初写过一篇分治的 题意:求A^B的所有因子之和,并对其取模 9901再输出 对于数A=p1^c1+p2^c2+...+pn*cn,它的所有约数之和为(1+p1+p1^2+p1^3+...+p1^(c ...
- poj 1845 Sumdiv (等比求和+逆元)
题目链接:http://poj.org/problem?id=1845 题目大意:给出两个自然数a,b,求a^b的所有自然数因子的和模上9901 (0 <= a,b <= 50000000 ...
随机推荐
- Linux下使用doxygen+vim生成c语言源程序文档的方法
1.安装 doxygen 有两种获得 doxygen 的方法.可以下载预编译的可执行文件,也可以从 SVN 存储库下载源代码并自己编译.清单 1 演示的是后一种方法. 清单 1. 安装和构建 doxy ...
- CQL查Cassandra条目数中的小问题
用查询语句:SELECT count(*) FROM tablename 返回类型是ResultSet,得到tablename中所有条目数 ResultSet类型可以直接用index访问:Result ...
- C++11之lambda表达式解析
什么是Lanmbda? 简短函数,就地书写.常用于向函数(算法)传递函数参数. 语法 Lambda 表达式,[capture](paras)mutable->return type{statem ...
- [Xcode 实际操作]六、媒体与动画-(16)实现音乐的背景播放
目录:[Swift]Xcode实际操作 本文将演示音乐的背景播放功能 打开项目信息配置文件[info.plist]. 需要在配置文件中进行一些操作,使程序支持音乐的背景播放. 点击鼠标右键,弹出右键菜 ...
- IT兄弟连 JavaWeb教程 过滤器2
3 多个过滤器的执行顺序 如果一个Web应用中使用一个过滤器不能解决实际中的业务需要,那么可以部署多个过滤器对业务请求进行多次处理,这样做就组成了一个过滤器链.Web服务器在处理过滤器链时,将按过滤 ...
- django后台管理系统(admin)的简单使用
目录 django后台管理系统的使用 检查配置文件 检查根urls.py文件 启动项目,浏览器输入ip端口/admin 如: 127.0.0.1/8000/admin 回车 注册后台管理系统超级管理 ...
- 使用docker搭建项目环境
# 清屏 clear # 查看当前文件夹下的列表 ls # 跳目录 cd ~ 代表当前用户文件夹 cd / 代表根目录 cd..返回上一级目录 cd #sudo 使用超级管理员创建文件夹 不加sudo ...
- oracle merge 目标表以及源表存在重复列的问题(转)
SQL> select * from t_source; ...
- 解决IE6 IE7绝对定位弹层被后面的元素遮住
解决IE6 IE7绝对定位弹层被后面的元素遮住? 弹层边框一直被后面的元素边框遮住,试了n种方法,只有这个比较好用. <div class="tuijian-table"&g ...
- Unity 打包PC和安卓的路径注意事项
if UNITY_STANDALONE_WIN || UNITY_EDITOR return Application.persistentDataPath + "/LocalData&quo ...