题意:

求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 (逆元 + 约数和)的更多相关文章

  1. poj 1845 Sumdiv 约数和定理

    Sumdiv 题目连接: http://poj.org/problem?id=1845 Description Consider two natural numbers A and B. Let S ...

  2. 【POJ 1845】 Sumdiv (整数唯分+约数和公式+二分等比数列前n项和+同余)

    [POJ 1845] Sumdiv 用的东西挺全 最主要通过这个题学了约数和公式跟二分求等比数列前n项和 另一种小优化的整数拆分  整数的唯一分解定理: 随意正整数都有且仅仅有一种方式写出其素因子的乘 ...

  3. poj 1845 【数论:逆元,二分(乘法),拓展欧几里得,费马小定理】

    POJ 1845 题意不说了,网上一大堆.此题做了一天,必须要整理一下了. 刚开始用费马小定理做,WA.(poj敢说我代码WA???)(以下代码其实都不严谨,按照数据要求A是可以等于0的,那么结果自然 ...

  4. poj 1845 POJ 1845 Sumdiv 数学模板

    筛选法+求一个整数的分解+快速模幂运算+递归求计算1+p+p^2+````+p^nPOJ 1845 Sumdiv求A^B的所有约数之和%9901 */#include<stdio.h>#i ...

  5. poj 1845 Sumdiv(约数和,乘法逆元)

    题目: 求AB的正约数之和. 输入: A,B(0<=A,B<=5*107) 输出: 一个整数,AB的正约数之和 mod 9901. 思路: 根据正整数唯一分解定理,若一个正整数表示为:A= ...

  6. POJ 1845 (约数和+二分等比数列求和)

    题目链接: http://poj.org/problem?id=1845 题目大意:A^B的所有约数和,mod 9901. 解题思路: ①整数唯一分解定理: 一个整数A一定能被分成:A=(P1^K1) ...

  7. POJ 1845 Sumdiv 【二分 || 逆元】

    任意门:http://poj.org/problem?id=1845. Sumdiv Time Limit: 1000MS Memory Limit: 30000K Total Submissions ...

  8. poj 1845 Sumdiv (等比求和+逆元)

    题目链接:http://poj.org/problem?id=1845 题目大意:给出两个自然数a,b,求a^b的所有自然数因子的和模上9901 (0 <= a,b <= 50000000 ...

  9. POJ 1845 求a^b的约数和

    题目大意就是给定a和b,求a^b的约数和 f(n) = sigma(d) [d|n] 这个学过莫比乌斯反演之后很容易看出这是一个积性函数 那么f(a*b) = f(a)*f(b)  (gcd(a,b) ...

随机推荐

  1. Spring Boot jar包linux服务器部署

    Spring Boot 部署 一.使用命令行java -jar 常驻 nohup java -jar spring-boot-1.0-SNAPSHOT.jar > log.file 2>& ...

  2. 02-移动端开发教程-CSS3新特性(中)

    1. 新的背景 背景在CSS3中也得到很大程度的增强,比如背景图片尺寸.背景裁切区域.背景定位参照点.多重背景等. 1.1 background-size设置背景图片的尺寸 cover会自动调整缩放比 ...

  3. ThinkPad安装deepin操作系统报错解决方法

    目前deepin操作系统,软件也比较多,所以想在自己的thinkpad t430笔记本上安装.但是安装时报错,具体错误忘了看了.反复试了好几次都不行,最后在网上查了,讲bios设置调整之后可以正常安装 ...

  4. 总体来说,require_once 肯定要比 require 性能好

    首先,总体来说,require_once 肯定要比 require 性能好. 因为 require 某个文件等同于 "编译 + 执行" 这个文件:require_once 避免了对 ...

  5. c 语言的基本语法

    1,c的令牌(Tokens) printf("Hello, World! \n"); 这五个令牌是: printf ( "Hello, World! \n" ) ...

  6. nodejs 使用CAS 实现 单点登录(SSO) 【开源库实现,简单】

    大部分企业使用 java 开发业务系统, 针对java cas的认证 demo 比较多 ,还有PHPCAS ,标准的参考这里: phpCAS 的使用 整理登录流程如下图,图片来自网络 找了不少资料,n ...

  7. centos系统升级PHP版本程序

    鉴于Centos 默认yum源的php版本太低了,手动编译安装又有点一些麻烦,那么如何采用Yum安装的方案安装最新版呢.那么,今天我们就来学习下如何用yum安装php最新版. 1.检查当前安装的PHP ...

  8. ehcache.xml 属性大全

    属性大全 name:缓存名称. maxElementsInMemory:缓存最大个数. eternal:对象是否永久有效,一但设置了,timeout将不起作用. timeToIdleSeconds:设 ...

  9. Java中如何实现j并发更新数据库同一条数据

    分情况来说:普通单应用并发.多应用或多台服务器并发 情况一:普通单应用并发 使用关键字synchronized就可实现. 情况二:多应用或多台服务器并发 因多个应用之间并非同一个jvm(应用)内,因此 ...

  10. webpack全局安装

    具体项目中才能使用webpack命令: npm install webpack -g npm install webpack-dev-server -g