HeHe HDU-2879【积性函数推导】
题意
定义 \(\text{He[N]}\) 表示满足以下方程的解的个数:
并且定义 \(\text{HeHe[N]}=\text{He[1]}\times \cdots \times \text{He[N]}\),对于给定的 \(N,M(1\leq N \leq 10^7,0<M\leq 10^9)\) ,求出 \(\text{He[N]} \bmod M\) 的值。
分析
其实打表也可以做,但自己没有看出规律来。只好采用另一种方法:积性函数。
结论\(1\):函数 \(\text{He[x]}\) 是积性函数,且 \(\text{He[p]=2}(p\in Prime)\)
证明:
对于方程:
等价于:
因为 \(X\in [0,p-1]\) ,所以 \(X\) 和 \(X-1\) 不可能被 \(p\) 整除,那么只有 \(X(X-1)=0\) ,即必然有 \(0,1\) 两个解。
结论\(2\):\(\text{He[pq]=4}\) (\(p,q\) 互质)
证明:
对于方程:
等价于:
首先,\(X\) 必然有 \(0,1\) 两个解。同时,\(X\) 可能为 \(p\) 或者 \(q\) 的倍数。假设 \(X=n\times p\) ,有:
即 \(q|n(np-1)\)。因为 \(X=np\in[0,pq-1]\) ,所以 \(n<q\) 。因此,\(q|(np-1)\) ,即 \(np\equiv 1(\bmod q)\) 。转化为线性方程 \(np+kq=1\) ,可知必然存在解。因为线性方程组的解 \(x=x_0+q·t\),所以存在一个解。当 \(q|X\) 时,同理,故存在 \(4\) 个解。
因此,对于 \(\text{He[x]}\) ,只要求出其中含有的不同质因子个数 \(k\) ,有 \(\text{He[x]}=2^k\)。对于 \(\text{HeHe[x]}\) ,相当于求阶乘,只要 \(\frac{N}{p_i}\) 就可以知道 \([1,N]\) 中有多少个数含有质因子 \(p_i\),依次累加即可。
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e7+5;
int prime[N],cnt;
bool vis[N];
void init()
{
int maxn=1e7;
for(int i=2;i<=maxn;i++)
{
if(!vis[i])
prime[++cnt]=i;
for(int j=1;j<=cnt&&i*prime[j]<=maxn;j++)
{
vis[i*prime[j]]=1;
if(i%prime[j]==0)
break;
}
}
}
ll power(ll a,ll b,ll mod)
{
ll res=1;
while(b)
{
if(b&1) res=res*a%mod;
a=a*a%mod;
b>>=1;
}
return res;
}
int main()
{
int t,n,m;
scanf("%d",&t);
init();
while(t--)
{
scanf("%d%d",&n,&m);
ll ans=0;
for(int i=1;i<=cnt&&prime[i]<=n;i++)
ans+=n/prime[i];
ans=power(2,ans,m);
printf("%lld\n",ans);
}
return 0;
}
原文地址:https://www.cnblogs.com/1024-xzx/p/14332689.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Angular里的消息(Message)显示
- Angular应用内路由(In App Route)的最佳实践
- Angular应用的路由指令RouterLink
- ctfhub-信息泄泄露_备份文件下载
- Angular In-memory Web API使用介绍
- 攻防世界-php_rce
- 无法添加某个relationship给SAP CRM Product category的一个可能原因
- 记一次DataGuard SWITCHOVER_STATUS 状态为RESOLVABLE GAP的处理
- ABAP数据库表的元数据
- ctfshow-萌新赛
- VC++ libcurl FTP上传客户端程序
- Oracle RAC变更实验之修改11gR2+公网IP地址(网段不变)
- C# 纯控制台创建一个全屏窗口
- MySQL MHA部署添加Linux/Unix基本信息至Django中
- 记一次innobackupex导致的从库无法同步的问题