洛谷 P1593 因子和 || Sumdiv POJ - 1845
以下弃用
没错,所有宣称直接用逆元/快速幂+费马小定理可做的,都会被hack掉(包括大量题解及AC代码)
什么原因呢?只是因为此题的模数太小了...虽然9901是质数,但是要求逆元的数完全可能是9901的倍数,从而与9901不互质,从而没有逆元
事实上,只要a是质数且a-1是9901的倍数,就可以hack了
如果涉及版权问题,不能用poj讨论版数据,额外提供几组数据:
217823 1
答案1
950497 1
答案1
另外还有一些程序在处理大数相乘取模时有问题(溢出),因此再提供一组数据:
49999991 2
答案3423
以上弃用
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<cmath>
#include<map>
#include<cassert>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
ll prime[10000],len,ans=1;
const ll md=9901;
bool vis[50100];
void dprime(int x,map<ll,ll> &ma)
{
ma.clear();
if(x<=1) return;
ll i,end=floor(sqrt(x+0.5));
for(i=1;prime[i]<=end;i++)
while(x!=prime[i])
{
if(x%prime[i]==0)
{
ma[prime[i]]++;
x/=prime[i];
}
else
break;
}
ma[x]++;
}
ll multi(ll x,ll y,ll mod)
{
long long tmp=(x*y-(long long)((long double)x/mod*y+1.0e-8)*mod);
return tmp<0 ? tmp+mod : tmp;
}
ll poww(ll a,ll b,ll md=md)
{
a%=md;
ll ans=1,base=a;
for(;b;base=multi(base,base,md),b>>=1)
if(b&1) ans=multi(ans,base,md);
return ans;
}
map<ll,ll> ma;
int main()
{
ll i,j,a,b;
for(i=2;i<=50000;i++)
{
if(!vis[i]) prime[++prime[0]]=i;
for(j=1;j<=prime[0]&&i*prime[j]<=50000;j++)
{
vis[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
scanf("%lld%lld",&a,&b);
if(a==0)
{
puts("0");
return 0;
}
if(a==1)
{
puts("1");
return 0;
}
dprime(a,ma);
for(map<ll,ll>::iterator it=ma.begin();it!=ma.end();it++)
{
pair<ll,ll> x=*it;
x.se*=b;
//printf("a%lld %lld\n",x.fi,x.se);
ans=ans*((poww(x.fi,x.se+1,md*(x.fi-1))-1)/(x.fi-1))%md;
}
printf("%lld",ans%md);
return 0;
}
洛谷 P1593 因子和 || Sumdiv POJ - 1845的更多相关文章
- 洛谷 - P1593 - 因子和 - 费马小定理
类似的因为模数比较小的坑还有卢卡斯定理那道,也是有时候逆元会不存在,因为整除了.使用一些其他方法避免通过逆元. https://www.luogu.org/fe/problem/P1593 有坑.一定 ...
- 洛谷 P1593 因子和 题解
题面 这道题在数学方面没什么难度: 对于每一个正整数n: 质因数分解后可以写成n=a1^k1a2^k2……*ai^ki 所求的数的因数和f(n)就等于f(n)=(1+a1+a1^2+……+a1^k1) ...
- 洛谷P1886 滑动窗口(POJ.2823 Sliding Window)(区间最值)
To 洛谷.1886 滑动窗口 To POJ.2823 Sliding Window 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每 ...
- Sumdiv POJ 1845
http://poj.org/problem?id=1845 题目 Time Limit: 1000MS Memory Limit: 30000K Description Consider two ...
- 洛谷 P1593 因子和
https://www.luogu.org/problemnew/show/P1593#sub 利用约数和定理:可以去看一下公式第13条 然后这个题目的话,要求$a^b$,那么我们首先可以先将a分解然 ...
- 洛谷P1593 因子和
题目描述 输入两个正整数a和b,求a^b的因子和.结果太大,只要输出它对9901的余数. 输入输出格式 输入格式: 仅一行,为两个正整数a和b(0≤a,b≤50000000). 输出格式: a^b的因 ...
- 洛谷 质因子分 p2043
#include <iostream>#include <algorithm>#include <cstring>using namespace std; cons ...
- Sumdiv POJ - 1845 (逆元/分治)
Consider two natural numbers A and B. Let S be the sum of all natural divisors of A^B. Determine S m ...
- POJ 1845 (洛谷 :题目待添加)Sumdiv
约数和 题目描述 给出a和b求a^b的约数和. 输入格式: 一行两个数a,b. 输出格式: 一个数表示结果对 9901 的模. Input 2 3 Output 15 SB的思路: 这是一道典型的数论 ...
随机推荐
- Retina屏幕下image-set
实现Retina屏幕下图像的显示方法,还特别给我截取了一段代码: .soso .logo .qqlogo { display: block; width: 134px; height: 44px; b ...
- codeforces 509 B题 Painting Pebbles
转载地址:http://blog.csdn.net/nike0good/article/details/43449739 B. Painting Pebbles time limit per test ...
- MYSQL进阶学习笔记十八:MySQL备份和还原!(视频序号:进阶_37)
知识点十九:MySQL的备份的还原(38) 一.mysql的备份 1.通过使用mysqldump的命令备份 使用mysqldump命令备份,mysqldump命令将数据库中的数据备份成一个文本文件.表 ...
- Linux 修改所属组与所属人
1.chown work /test/* 修改test文件夹下所有文件的所属人(owner)为work 2.chgrp work /test/* 修改test文件夹下所有文件的所属组(group)为w ...
- hdu-5742 It's All In The Mind(数学)
题目链接: It's All In The Mind Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (J ...
- 解决js 运算 精度缺失
github地址: https://github.com/MikeMcl/big.js
- python虚拟环境管理包virtualenvwrapper
1.打开cmd 2.安装virtualenvwrapper pip install virtualenvwrapper-win 3.配置虚拟环境的位置 新建系统变量默认在c盘 4.新建虚拟环境 mkv ...
- Android Studio工程Gradle编译报错
一.环境的搭建: 首先搭建好AndroidStudio环境.我使用的是Ubuntu 12.04系统(由于此机器还要运行其他程序,为避免兼容性问题,暂未更新到最新,而继续沿用此稳定版),java和jdk ...
- POJ3273(最大化问题)
Monthly Expense Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 20603 Accepted: 8101 ...
- ARM、DSP、FPGA的技术特点和区别
在嵌入式开发领域,ARM是一款非常受欢迎的微处理器,其市场覆盖率极高,DSP和FPGA则是作为嵌入式开发的协处理器,协助微处理器更好的实现产品功能. 那三者的技术特点以及区别是什么呢?下文就此问题略做 ...