K - Happy Equation(ZOJ 4123)

Time Limit : 1 Second      Memory Limit : 65536 KB

Source : 第十届山东省ACM省赛

Problem Link : ZOJ 4123

Author : Houge  Date : 2019-5-24

  看了快一周的k题,看了好多题解,还是不明白,只恨自己不是数论大佬。昨天看了本校数竞大佬Ch_3225的题解,感觉还不错,和我目前看过的都不太一样(但还是看不懂)。征得同意后,这里就直接copy上来了。

(注意:在此篇题解中,为码字方便,记a^b为a的b次方,而不是c语言定义的异或运算。优先级以幂的运算优先级为准。)

(“|”符号为整除符号,即右边的数?左边的数得到整数)

题目

  即求x∈{1,2,.....,2^p}使得a^x≡x^a(mod 2^p)。

分析:

  要求式为了找到x的个数,我们考虑什么样的x满足上述方程。

  ·变形,原式即为2^p|abs(a^x-x^a)。  (①式)

  ·记abs(a^x-x^a)为R。

我们考虑a^x-x^a的2的幂次。为了从右式通过提取因子提出尽可能多的2,我们设:

  ·a=a0*2^i;

  ·x=x0*2^j;

其中a0和x0都是奇数。

于是代入①式,2^p|abs((a0*2^i)^(x0*2^j)-(x0*2^j)^(a0*2^i))

于是    R=2^(min((i*x0*2^j),(j*a0*2^i)))*p;(x!=a)(p是某个奇数)

或    R=0;(x==a)

即    R=2^(min((i*x),(j*a)))*p;(x!=a)(p是某个奇数)

或    R=0;(x==a)

当x!=a的时候,我们想要使x满足该方程,需要

2^p|2^(min((i*x),(j*a)))*p;(p是某个奇数)

即  p<=min(i*x,j*a)

即  i*x>=p且j*a>=p  ②式

因为我们要找的是合法的x,并且我们设的j也和x有关,于是我们将上式变形:

  x>=⌈p/i⌉且j>=⌈p/a⌉

  这两个式子是说,x(提醒一下x!=a,x==a一会再另算)要满足要求式必须是在[⌈p/x⌉,2^p]区间内并且被2^⌈p/a⌉整除的整数.

  值得注意的是,如果i=0,即a为奇数,我们回到式②,发现i*x不可能大于等于②,从而没有x!=a满足要求式。对于这种特殊的情况,可以设下边说的那个X在这种情况下为0。

  这样想想,这个问题变成了求一个区间里有多少个某个数的倍数这种问题,就比较显然了。

  满足条件的x!=a的x有X=(2^p/2^⌈p/a⌉-(⌈(p+i-1)/i⌉-1)/2^⌈p/a⌉)个。

  当然,对于x==a的情况,我们单独算一下,是不是已经满足式X,或者不符合x在定义域内的要求。

  如果x符合在定义域内的要求并且不满足式②的话,那么Y=1;否则Y=0。

  我们要求的数就是X+Y了。计算输出它即可。

代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 long long pingfanmi(long long a,long long b)
 4 {
 5     long long d=b,sum=1;
 6     while(d--)sum*=a;
 7     return sum;
 8 }
 9 int main()
10 {
11     int T;
12     long long a,i,p,temp,s,r,sum;
13     scanf("%d",&T);
14     while(T--)
15     {
16         sum=0;
17         scanf("%lld%lld",&a,&p);
18         s=pingfanmi(2,p);
19         r=pingfanmi(2,(p+a-1)/a);
20         temp=a;
21         for(i=0;temp%2==0;i++,temp/=2);
22         if(i==0)
23         {
24             printf("1\n");
25             continue;
26         }
27         sum=(s/r-((p+i-1)/i-1)/r);
28         if(a%r==0&&a<p/i)sum++;
29         printf("%lld\n",sum);
30     }
31     return 0;
32 }
33 //别问我为什么没用快速幂,我懒

原文地址:https://www.cnblogs.com/CSGOBESTGAMEEVER/p/10919506.html

时间: 2024-07-31 06:41:18

K - Happy Equation(ZOJ 4123)的相关文章

2019山东省赛K - Happy Equation ZOJ - 4123 题解

题意: 一个数论题,要求满足如下等式的x有多少个. 思路: 当时比赛是,队伍看到这个题,也没有做太多的思考,就是无从下手,几乎放弃.但是看到学校另外两支队伍都过了这个题,感觉自己还是好菜. 打表可以发现,当a为奇数的时候答案为1.当a为偶数的时候,x一定也是偶数,这个还是比较明显的. 对左边进行推导,因为a为偶数,设a=2*t,所以a^x=2^x*t^x,所以当x大于p时,这个求余之后一定为0.由于p很小,可以直接暴力求解,所以对于右边直接考虑x^a求余之后为0的x的情况.由于x为偶数.我们再次

Happy Equation ZOJ - 4123 (数论)

题目链接:ZOJ - 4123  题目大意:给你a和p,然后问你[1,2^p]中满足那个等式的值有多少个. 具体思路: 具体的证明:https://blog.csdn.net/v5zsq/article/details/79325038 打表发现当a为奇数的时候答案为1.当a为偶数的时候,x也必须为偶数. 然后我们将a分解为2*t.然后a^x就等于 (2^x)*(t^x).当x大于p的时候,此时取模后一定为0.对于所以在x属于[0,p]这段区间暴力算. 然后我们将b分解为(2^k)*t.然后b^

zoj 2112 Dynamic Rankings(主席树&amp;动态第k大)

Dynamic Rankings Time Limit: 10 Seconds      Memory Limit: 32768 KB The Company Dynamic Rankings has developed a new kind of computer that is no longer satisfied with the query like to simply find the k-th smallest number of the given N numbers. They

zoj 1203 Swordfish (kruskal 克鲁斯卡尔)

Swordfish Time Limit: 2 Seconds      Memory Limit: 65536 KB There exists a world within our world A world beneath what we call cyberspace. A world protected by firewalls, passwords and the most advanced security systems. In this world we hide our dee

Sigma_k Equation

\section{Elementary inequalities for $\sigma_k$ function (Lecture given by Xinan Ma)}The elementary symmetric functions appear naturally in the geometric quantities. In order to carry on analysis, we need to understand properties of the elementary sy

Noi2007 货币兑换

我是萌萌的传送门 小半个上午+一下午都给了这题了QAQ-- 都知道是斜率优化,问题是我看这题根本就是一个人一个式子啊(╯‵□′)╯︵┻━┻ 算了,把我的过程列出来吧-- 令$f[i]$表示第i天结束时强制卖出所有金券最多能得到的软妹币数量,枚举上一次买入金券的时间,就有 \begin{equation}f[i]=\max_{j=1}^{i-1}\{A_i x+B_i y\}\end{equation} (这里没有写隐含条件$f[i]\ge f[i-1]$,记得更新完所有决策之后对下一个$f$取一

OpenGL学习之路(二)

1 引子 在上一篇读书笔记中,我们对书本中给出的例子进行详细的分析.首先是搭出一个框架:然后填充初始化函数,在初始化函数中向OpenGL提供顶点信息(缓冲区对象)和顶点属性信息(顶点数组对象),并启用顶点数组对象:最后填充绘制函数,首先清空颜色缓存,然后调用glDrawArray来绘制基本图形.例子中使用的坐标都是二维坐标,所以画出来的图形是二维图形(这里是两个三角形),而我们知道OpenGL最主要是用来进行三维图形的渲染的,所以有必要在学习OpenGL相关API之前对三维变换做一个简要的介绍.

Latex 建立带有竖线和编号的算法环境

Latex源码: \documentclass{article} \usepackage{amssymb} \usepackage{amsmath} \usepackage[linesnumbered, ruled]{algorithm2e} \SetKwRepeat{Do}{do}{while}% \begin{document} \begin{algorithm}[!ht] \caption{Algorithm for problem \eqref{WWW} } \SetKwInOut{In

视觉SLAM中的数学基础 第二篇 四元数

视觉SLAM中的数学基础 第二篇 四元数 什么是四元数 相比欧拉角,四元数(Quaternion)则是一种紧凑.易于迭代.又不会出现奇异值的表示方法.它在程序中广为使用,例如ROS和几个著名的SLAM公开数据集.g2o等程序都使用四元数记录机器人的姿态.因此,理解四元数的含义与用法,对学习SLAM来说是必须的.本节我们就来讲讲四元数. 首先,请读者不要对四元数有什么神秘的感觉.四元数仅是3D姿态的一种表达方式,我们用一个单位四元数表达原本用旋转矩阵表示的三维旋转.这样做一个直接的好处是省空间.一