题面

这道题在数学方面没什么难度:

对于每一个正整数n:

质因数分解后可以写成n=a1^k1a2^k2……*ai^ki

所求的数的因数和f(n)就等于f(n)=(1+a1+a1^2+……+a1^k1)(1+a2+a2^2+……+a2^k2)……*(1+ai+ai^2+……+ai^ki)

利用等比数列通项公式可以O(1)的时间算出每一项;

然后可以使用扩展欧几里得,费马小定理或求解逆元。

但,仅仅是这样吗?

注意,模数p是9901,十分的小,但是要求逆元的数完全可能是9901的倍数,从而与9901不互质,从而没有逆元

例如:950497 1 ans=2;

在处理完以上的特殊情况后我们可以十分生气的一边骂出题人一边AC掉它;

#include <bits/stdc++.h>
#define int long long
#define p 9901
using namespace std;
long long KSM(long long a,long long b)
{
long long res=;
while(b){
if(b&) res=res*a%p;
a=a*a%p;
b/=;
}
return res;
}
long long yinzi[],cnt,num[];
void fenjie(int a)
{
for(int i=;i<=sqrt(a);i++){
if(a%i==){
yinzi[++cnt]=i;
while(a%i==){
++num[cnt];
a/=i;
}
}
}
if(a>=){
yinzi[++cnt]=a;
num[cnt]=;
}
}
signed main()
{
int a,b;
cin>>a>>b;
fenjie(a);
for(int i=;i<=cnt;i++){
num[i]=num[i]*b;
}
long long ans=;
for(int i=;i<=cnt;i++){
ans=(ans*(-KSM(yinzi[i],num[i]+))%p*KSM((-yinzi[i]),p-))%p;
}
if(ans==){
cout<<""<<endl;
return ;
}
cout<<ans;
}

最新文章

  1. ubuntu下更改鼠标移动速度
  2. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(31)-MVC使用RDL报表
  3. SQL基础--完整性约束
  4. AndroidStudio .gitinore编写
  5. kinect for windows sdk
  6. #JavaScript对象与继承
  7. QLabel设置行间距(使用html的语法,比较巧妙)
  8. Spark MLlib KMeans 聚类算法
  9. SQL插入数据--数据中的某一列来自本表中的数据
  10. windows上python的安装
  11. CentOS 7下PXE+Kickstart无人值守安装操作系统
  12. SpringBoot几个重要的事件回调、监听机制
  13. Confluence 6 空间标识
  14. Spring.net介绍及MVC中应用
  15. ajax 把返回结果作为参数传递
  16. java中集合格式及json格式的特点和转换
  17. windows的共享内存
  18. 【mysql】备份篇1:使用系统计划任务+mysqldump 定时备份mysql数据库 不用输入密码自动导出sql文件
  19. Java_io__BIO_NIO_AIO
  20. MarkDown 语言简单使用

热门文章

  1. C# IIS域名绑定
  2. PHP大文件上传断点续传源码
  3. Visual Stdio C++ 编译器、链接器常用命令
  4. FFT用于高效大数乘法(当模板用)
  5. C++常用string函数
  6. pycharm中调用函数方法自动补全p,m,c,v,f分别是什么意思
  7. 学习笔记:python3,代码。小例子习作
  8. 「TJOI2019」唱、跳、rap 和篮球
  9. [JZOJ6400]:Game(贪心+线段树+二分)
  10. python环境下安装virtualenv,virtualenvwrapper