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 ...
随机推荐
- STL::next_permutation();
next_permutation()可以按字典序生成所给区间的全排列. 在STL中,除了next_permutation()外,还有一个函数prev_permutation(),两者都是用来计算排列组 ...
- 《Java多线程编程核心技术》读后感(六)
多线程的死锁 package Second; public class DealThread implements Runnable { public String username; public ...
- linux c实现的提取文件名的小程序
/*@author etangyushan *工作中很多时候会和文件名打交道,有时候只需要文件名称,就写了这么一个小程序 *这个函数实现了把一个文件的绝对路径和后缀去除,只留下文件名的功能 * */ ...
- yzm10的ACM集训小感
7月30号,ACM集训进行了两周,一切都已on the right way.这时的我适时地从题海中探出头,其实除了刷题,也该写点什么来总结下过去.首先,在第一周里,我学习了数据结构,知道了STL这么一 ...
- html解决的兼容问题
手机版不缩放 <meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum ...
- css样式也技巧
目录 关于iPhone的点击事件绑定无效的处理方法 https://blog.csdn.net/u014477038/article/details/52527194 去掉a.button.input ...
- ue4 创建简易动画
这个功能本来是在原动画基础上做调整用的,所以直接用来做动画并不是很合适,如果要做复杂动画,叠加的轨迹会非常多,不好用 (蒙皮好的)模型右键,创建一个动画合成 点开这个动画合成,创建动画序列(就是普通动 ...
- jquery插件fileupload图片上传(前端如何处理)
1.页面首先引入jquery,版本不要低于1.6 <script src="../js/jquery.min.js"></script>2.其次页面引入对应 ...
- 在VMware上克隆Linux虚拟机及其网卡配置方法
最近在搭建Hadoop集群,1个Master,3个Workers.使用VMware workstations创建Linux虚拟机,版本是CentOS7.安装完成并做了相应的网络配置后,使用VMware ...
- Nginx 最新版源码编译安装 包含常用模块作用及所需依赖
第一部分 Nginx最新版源码编译安装 1. 使用的模块 模块1:http_rewrite_module 基于正则匹配来实现重定向.依赖PCRE库,见依赖1 模块2:http_gzip_module ...