poj 1845 (逆元 + 约数和)
题意:
求A^B的所有约数(即因子)之和,并对其取模 9901再输出。
思路:
A可以表示为A=(p1^k1)*(p2^k2)*(p3^k3)*....*(pn^kn) 其中pi均为素数
那么A的所有因子之和可以表示成
S = (1+p1+p1^2+p1^3+...p1^k1) * (1+p2+p2^2+p2^3+….p2^k2) * (1+p3+ p3^3+…+ p3^k3) * .... * (1+pn+pn^2+pn^3+...pn^kn)
然后可以转化成等比公式,在求除法同余的时候求逆元
对于 a/b mod m可以转化成 (a mod bm)/m /*参考ACdreamers
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
typedef long double ld;
const ld eps=1e-10;
const int inf = 0x3f3f3f;
const int maxn = 1e6+10;
bool check[maxn];
int prime[maxn]; ll tot; void get_prime()
{
tot = 0;
memset(check,false,sizeof(check));
check[1] = true;
for(int i = 2; i<= maxn; i++)
{
if(!check[i])
{
prime[tot++] = i;
for(int j = i+i; j <= maxn; j+=i)
check[j] = true;
}
}
} ll multi(ll a,ll b,ll mod)
{
ll ans = 0;
a%=mod;
while(b)
{
if(b & 1)
{
ans = (ans+a) % mod;
b -- ;
}
a = (a+a) % mod;
b >>= 1;
}
return ans;
} ll pow_mod(ll a,ll n,ll p)
{
ll ans = 1;
a %= p;
while(n)
{
if(n & 1)
{
ans = multi(ans,a,p);
n--;
} a = multi(a,a,p);
n >>= 1;
}
return ans;
} ll sum(ll x,ll b)
{
ll t = 1;
ll tnum = 0;
ll tmp = x;
for(int i = 0; i < tot; i++)
{
if(tmp % prime[i] == 0)
{
tnum = 0;
while(tmp % prime[i] == 0)
{
tmp /= prime[i];
tnum ++;
}
ll M = (prime[i]-1)*9901;
t *= (pow_mod(prime[i],tnum*b+1,M)-1+M)/(prime[i]-1);
t %= 9901;
}
}
if(tmp > 1)
{
ll M = (tmp-1)*9901;
t *= (pow_mod(tmp,tnum*b+1,M)-1+M)/(tmp-1);
t %= 9901;
}
return t%9901;
} int main()
{
ll a,b;
get_prime();
while(scanf("%I64d%I64d",&a,&b) != EOF)
{
printf("%I64d\n",sum(a,b)%9901);
}
return 0;
}
poj 1845 (逆元 + 约数和)的更多相关文章
- poj 1845 Sumdiv 约数和定理
Sumdiv 题目连接: http://poj.org/problem?id=1845 Description Consider two natural numbers A and B. Let S ...
- 【POJ 1845】 Sumdiv (整数唯分+约数和公式+二分等比数列前n项和+同余)
[POJ 1845] Sumdiv 用的东西挺全 最主要通过这个题学了约数和公式跟二分求等比数列前n项和 另一种小优化的整数拆分 整数的唯一分解定理: 随意正整数都有且仅仅有一种方式写出其素因子的乘 ...
- poj 1845 【数论:逆元,二分(乘法),拓展欧几里得,费马小定理】
POJ 1845 题意不说了,网上一大堆.此题做了一天,必须要整理一下了. 刚开始用费马小定理做,WA.(poj敢说我代码WA???)(以下代码其实都不严谨,按照数据要求A是可以等于0的,那么结果自然 ...
- poj 1845 POJ 1845 Sumdiv 数学模板
筛选法+求一个整数的分解+快速模幂运算+递归求计算1+p+p^2+````+p^nPOJ 1845 Sumdiv求A^B的所有约数之和%9901 */#include<stdio.h>#i ...
- poj 1845 Sumdiv(约数和,乘法逆元)
题目: 求AB的正约数之和. 输入: A,B(0<=A,B<=5*107) 输出: 一个整数,AB的正约数之和 mod 9901. 思路: 根据正整数唯一分解定理,若一个正整数表示为:A= ...
- POJ 1845 (约数和+二分等比数列求和)
题目链接: http://poj.org/problem?id=1845 题目大意:A^B的所有约数和,mod 9901. 解题思路: ①整数唯一分解定理: 一个整数A一定能被分成:A=(P1^K1) ...
- POJ 1845 Sumdiv 【二分 || 逆元】
任意门:http://poj.org/problem?id=1845. Sumdiv Time Limit: 1000MS Memory Limit: 30000K Total Submissions ...
- poj 1845 Sumdiv (等比求和+逆元)
题目链接:http://poj.org/problem?id=1845 题目大意:给出两个自然数a,b,求a^b的所有自然数因子的和模上9901 (0 <= a,b <= 50000000 ...
- POJ 1845 求a^b的约数和
题目大意就是给定a和b,求a^b的约数和 f(n) = sigma(d) [d|n] 这个学过莫比乌斯反演之后很容易看出这是一个积性函数 那么f(a*b) = f(a)*f(b) (gcd(a,b) ...
随机推荐
- iOS开发之UITextView,设置textViewplaceholder
一.设置textView的placeholder UITextView上如何加上类似于UITextField的placeholder呢,其实在UITextView上加上一个UILabel或者UITex ...
- 201421123042 《Java程序设计》第11周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1. 源代码阅读:多线程程序BounceThread 1.1 BallR ...
- Count on a tree
bzoj 2588: Spoj 10628. Count on a tree http://www.lydsy.com/JudgeOnline/problem.php?id=2588 Descrip ...
- nyoj Dinner
Dinner 时间限制:100 ms | 内存限制:65535 KB 难度:1 描述 Little A is one member of ACM team. He had just won t ...
- vue style width a href动态拼接问题 ?
style width 这个问题 折磨了我一个上午了 好惭愧 因为项目涉及到 进度条 所以必须用行内样式 style 用过vue的都知道 vue中style的用法 大众用法 :style=&quo ...
- System.Reflection名称空间下的程序集类Assembly应用.
利用反射中的程序集类(Assembly--抽象类)动态加载类库(.dll)或者可执行程序(.exe). 优点:①.可以消除if条件的逻辑判断.②.减少内存资源.③.有利于程序扩展. 缺点... 使用静 ...
- JQ.ajax 各种参数及属性设置 ( 转载 )
$.ajax({ type: "post", url: url, dataType:'html', success: function(da ...
- 阿里云API网关(5)用户指南(调用 API)
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- C# 客户端程序调用外部程序的三种实现
简介 我们用C#来开发客户端程序的时候,总会不可避免的需要调用外部程序或者访问网站,本篇博客介绍了三种调用外部应用的方法,供参考 实现 第一种是利用shell32.dll,实现ShellExecute ...
- 解析 Javascript - this
在函数中 this 到底取何值,是在函数真正被调用执行的时候确定下来的,函数定义的时候确定不了. 因为 this 的取值是执行上下文环境的一部分,每次调用函数,都会产生一个新的执行上下文环境.当你在 ...