以下弃用

这是一道一样的题(poj1845)的数据

没错,所有宣称直接用逆元/快速幂+费马小定理可做的,都会被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的更多相关文章

  1. 洛谷 - P1593 - 因子和 - 费马小定理

    类似的因为模数比较小的坑还有卢卡斯定理那道,也是有时候逆元会不存在,因为整除了.使用一些其他方法避免通过逆元. https://www.luogu.org/fe/problem/P1593 有坑.一定 ...

  2. 洛谷 P1593 因子和 题解

    题面 这道题在数学方面没什么难度: 对于每一个正整数n: 质因数分解后可以写成n=a1^k1a2^k2……*ai^ki 所求的数的因数和f(n)就等于f(n)=(1+a1+a1^2+……+a1^k1) ...

  3. 洛谷P1886 滑动窗口(POJ.2823 Sliding Window)(区间最值)

    To 洛谷.1886 滑动窗口 To POJ.2823 Sliding Window 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每 ...

  4. Sumdiv POJ 1845

    http://poj.org/problem?id=1845 题目 Time Limit: 1000MS   Memory Limit: 30000K Description Consider two ...

  5. 洛谷 P1593 因子和

    https://www.luogu.org/problemnew/show/P1593#sub 利用约数和定理:可以去看一下公式第13条 然后这个题目的话,要求$a^b$,那么我们首先可以先将a分解然 ...

  6. 洛谷P1593 因子和

    题目描述 输入两个正整数a和b,求a^b的因子和.结果太大,只要输出它对9901的余数. 输入输出格式 输入格式: 仅一行,为两个正整数a和b(0≤a,b≤50000000). 输出格式: a^b的因 ...

  7. 洛谷 质因子分 p2043

    #include <iostream>#include <algorithm>#include <cstring>using namespace std; cons ...

  8. 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 ...

  9. POJ 1845 (洛谷 :题目待添加)Sumdiv

    约数和 题目描述 给出a和b求a^b的约数和. 输入格式: 一行两个数a,b. 输出格式: 一个数表示结果对 9901 的模. Input 2 3 Output 15 SB的思路: 这是一道典型的数论 ...

随机推荐

  1. Redis集群与事务

    redis集群对象JedisCluster不支持事务,但是,集群里面的每个节点支持事务 但是可以用第三方呀 启动下,然后看看事务问题: /usr/local/redis/bin/redis-serve ...

  2. iOS:UITextField中文输入法输入时对字符长度的限制

      如题的问题,又是个让我抓狂了大半天的问题,还是做个记录,有与类似问题的同学可参考,但不一定对.具体问题还需具体分析.我遇到的需求是这样的:有一个输入框,输入框内输入文字,文字字数限制在20字.   ...

  3. hdu 2188 悼念512汶川大地震遇难同胞——选拔志愿者(Bash Game)

    题意:从0开始捐款,每次不超过m元,首先达到n元的获胜 思路:等同于从n开始,每次取不超过m,首先达到0的获胜.(Bash Game) #include<iostream> #includ ...

  4. EnumDescription

    using System; using System.Reflection; using System.Collections; using System.Collections.Generic; n ...

  5. Service的两种启动方式

    今天又写Service,提示覆写onBind(),想起Android好像是有个叫做Binder的IPC机制. Service里面有一个onBind(),一个onStartCommand(),两者都能启 ...

  6. spring boot 部署 发布

    Spring Boot应用的打包和部署 字数639 阅读2308 评论0 喜欢5 现在的IT开发,DevOps渐渐获得技术管理人员支持.云计算从ECS转向Docker容器技术.微服务的概念和讨论也越来 ...

  7. UESTC(LCA应用:求两点之间的距离)

    Journey Time Limit: 15000/3000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Bob has ...

  8. 写出高效优美的单片机C语言代码

    程序能跑起来并不见得你的代码就是很好的c代码了,衡量代码的好坏应该从以下几个方面来看 1,代码稳定,没有隐患. 2,执行效率高. 3,可读性高. 4,便于移植. 下面发一些我在网上看到的技巧和自己的一 ...

  9. ubuntu--vim 技巧

    本文介绍了vi (vim)的基本使用方法,但对于普通用户来说基本上够了! vi编辑器是所有Unix及Linux系统下标准的编 辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法 ...

  10. c/c++面试45-50之字符串

    45 使用库函数将数字转换为字符串,下面是常用库函数 (1) itoa():将整型转换为字符串 (2)ltoa():将长整形转换为字符串 (3)gcvt():将浮点转换为字符串 46 不使用库函数将整 ...