【BZOJ 1409】 Password 数论(扩展欧拉+矩阵快速幂+快速幂)
读了一下题就会很愉快的发现,这个数列是关于p的幂次的斐波那契数列,很愉快,然后就很愉快的发现可以矩阵快速幂一波,然后再一看数据范围就......然后由于上帝与集合对我的正确启示,我就发现这个东西可以用欧拉函数降一下幂,因为两个数一定互质因此不用再加一个phi(m),于是放心的乘吧宝贝!!
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <iostream>
#include <cmath>
#define r register
using namespace std;
typedef long long LL;
inline LL read()
{
r LL sum=;
r char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')
{
sum=(sum<<)+(sum<<)+ch-'';
ch=getchar();
}
return sum;
}
LL prime[];
bool isnot[];
LL T;
LL temp_a[][],a[][],b[],temp_b[];
LL m,p;
inline void Init()
{
for(r LL i=;i<=(<<);i++)
{
if(!isnot[i])
prime[++T]=i;
for(r LL j=;j<=T&&prime[j]*i<=(<<);j++)
{
isnot[prime[j]*i]=;
if(i%prime[j]==)break;
}
}
m=read(),p=read();
}
inline LL Opha(LL x)
{
r LL to=(LL)sqrt(x+0.5);
r LL ans=x;
for(r LL i=;prime[i]<=to;i++)
if(x%prime[i]==)
{
ans=ans/prime[i]*(prime[i]-);
while(x%prime[i]==)x/=prime[i];
}
if(x!=)
ans=ans/x*(x-);
return ans;
}
inline void Multi_One(LL k)
{
memset(temp_b,,sizeof(temp_b));
for(int i=;i<=;i++)
for(int j=;j<=;j++)
temp_b[i]=(temp_b[i]+a[i][j]*b[j]%k)%k;
memcpy(b,temp_b,sizeof(b));
}
inline void Multi_Two(LL K)
{
memset(temp_a,,sizeof(temp_a));
for(int i=;i<=;i++)
for(int j=;j<=;j++)
for(int k=;k<=;k++)
temp_a[i][j]=(temp_a[i][j]+a[i][k]*a[k][j]%K)%K;
memcpy(a,temp_a,sizeof(a));
}
inline LL POW(LL x,LL k)
{
a[][]=%k,a[][]=%k,a[][]=%k,a[][]=;
b[]=%k,b[]=;
while(x)
{
if(x&)Multi_One(k);
x>>=,Multi_Two(k);
}
b[]%=k;
return b[];
}
inline LL Pow(LL x,LL y,LL k)
{
LL ans=%k;
while(y)
{
if(y&)ans=ans*x%k;
y>>=,x=x*x%k;
}
ans%=k;
return ans;
}
inline void Work()
{
while(m--)
{
r LL n=read(),q=read();
r LL x=Opha(q);
r LL y=POW(n-,x);
printf("%lld\n",Pow(p,y,q));
}
}
int main()
{
Init();
Work();
return ;
}
【BZOJ 1409】 Password 数论(扩展欧拉+矩阵快速幂+快速幂)的更多相关文章
- interesting Integers(数学暴力||数论扩展欧几里得)
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwwAAAHwCAIAAACE0n9nAAAgAElEQVR4nOydfUBT1f/Hbw9202m0r8
- hiho一下 第九十六周 数论五·欧拉函数
题目1 : 数论五·欧拉函数 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho有时候会用密码写信来互相联系,他们用了一个很大的数当做密钥.小Hi和小Ho约定 ...
- hdu 1286:找新朋友(数论,欧拉函数)
找新朋友 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hihoCoder 数论五·欧拉函数
题目1 : 数论五·欧拉函数 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho有时候会用密码写信来互相联系,他们用了一个很大的数当做密钥.小Hi和小Ho约定 ...
- [bzoj 1409] Password 矩阵快速幂+欧拉函数
考试的时候想到了矩阵快速幂+快速幂,但是忘(bu)了(hui)欧拉定理. 然后gg了35分. 题目显而易见,让求一个数的幂,幂是斐波那契数列里的一项,考虑到斐波那契也很大,所以我们就需要欧拉定理了 p ...
- [BZOJ 1409] Password
贴一发题面 1409: Password Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 242 Solved: 82[Submit][Status][D ...
- 「POJ3696」The Luckiest number【数论,欧拉函数】
# 题解 一道数论欧拉函数和欧拉定理的入门好题. 虽然我提交的时候POJ炸掉了,但是在hdu里面A掉了,应该是一样的吧. 首先我们需要求的这个数一定可以表示成\(\frac{(10^x-1)}{9}\ ...
- $BZOJ$2818 $gcd$ 莫比乌斯反演/欧拉函数
正解:莫比乌斯反演/欧拉函数 解题报告: 传送门$QwQ$ 一步非常显然的变形,原式=$\sum_{d=1,d\in prim}^{n}\sum_{i=1}^{n}\sum_{j=1}^{n}[gcd ...
- bzoj 2190 [SDOI2008]仪仗队(欧拉函数)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2190 [题意] n*n的正方形,在(0,0)格点可以看到的格子数目. [思路] 预处理 ...
随机推荐
- Hadoop(5)-HDFS概述
HDFS产生背景 HDFS优缺点 HDFS组成架构 HDFS文件块大小
- jenkins+maven+docker集成java发布(一)自动发布
JAVA项目持续集成发布 标签(空格分隔): java jenkins 微服务中持续集成自动发布是很重要的一个环节,将不同的模块应用自动部署到一台或者N台服务器中如果采用人工部署的方式不太现实 git ...
- php安装php-redis扩展
下载安装php-redis扩展: 地址:https://github.com/phpredis/phpredis/ $ wget http://pecl.php.net/get/redis-3.1.2 ...
- 基于STM32F103的Max30100心率、血氧检测代码(转载)
MAX30100是能够读取心率.血氧的传感器,通信方式是通过IIC进行通信.其工作原理是通过红外led灯照射,能够得到心率的ADC值. MAX30100的寄存器可以分为五类,状态寄存器.F ...
- 8-C++远征之继承篇-学习笔记
C++远征之继承篇 开篇介绍 整个C++远征计划: 起航->离港->封装->继承 为什么要用继承? 为什么要有继承? 如何来定义基类 <----> 派生类? 基类到派生类 ...
- Python3 适合初学者学习的银行账户登录系统
一.所用知识点: 1. for循环与if判断的结合 2. %s占位符的使用 3. 辅助标志的使用(标志位) 4. break的使用 二.代码示例: ''' 银行登录系统 ''' uname = &qu ...
- P1049 装箱问题
装箱问题 题目描述 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30,每个物品有一个体积(正整数). 要求n个物品中,任取若干个装入箱内,使 ...
- 初步学习pg_control文件之二
接前文:初步认识pg_control文件 继续学习,pg_control文件在何处形成的?是在initdb的时候,运用的函数如下: /* * This func must be called ONCE ...
- Django admin操作
无名小妖 昵称:无名小妖园龄:1年6个月粉丝:22关注:1 +加关注 搜索 常用链接 我的随笔 我的评论 我的参与 最新评论 我的标签 我的标签 Python(1) python3 ...
- Spring MVC - URL路径映射
1. 普通映射 A. @RequestMapping("/test1") B. @RequestMapping(value={"/test1", "/ ...