當時省賽花了很長時間在這道題上,最後也沒做出來,特別傷心啊啊啊啊賽後仔細研究了一下,怎麼說呢,學到了很多,也認識到了自己的不足,唉…
little sub has just received an equation, which is shown below, as his birthday gift.a^x ≡ x^a(mod 2^p).
given the value ofa, please help little sub count the number ofx(1<=x<=2^p)which satisfies the equation.
there are multiple test cases. the first line of the input contains an integertabout(1000), indicating the number of test cases. for each test case:
the first and only line contains two integers :aandp(1<=a<=1e9,1<=p<=30).
for each test case output one line containing one integer, indicating the answer.
26 12
8 16
1023話不多說,上**吧,**說實話寫的有點亂,將就看一下吧16383
#include
#include
#include
#include
#include
using namespace std;
intmain()
if(p==1)
//當p為1時,x的個數必為1
if(p==2)
//當p為2時,x的個數必為2
/*以上特判是打表發現的*/
ans=
0;sum=1;
//sum為2的p次方
c=2;
//c為基數2
int pl=p;
//在這裡用pl來記錄p!很重要哈,pl就是p,別看到後面不知道pl是啥
while
(p>0)
//這裡用計算2的p次方記為sum
c=c*c;
p=p>>1;
}for
(i=1
;i)//因為現在只考慮a是偶數的情況,所以a是2的倍數
a1=a1%sum;
a1=a1*a1;
o=o>>1;
} s1=s1%sum;
while
(e>0)
a2=a2%sum;
a2=a2*a2;
e=e>>1;
} s2=s2%sum;
if(s2==s1)
}//前面說過,當x大於p時,左面的的式子結果必為0,
//所以就判斷右面的式子模2^p是否為0就行了
if(a>=pl)
//這裡我分了兩種情況,當a>=pl時,只要求出在pl到2^p之間2的倍數的個數就行啦
if(pl%2!=
0)}if
(a//當a
c=2;
long
long sum1=1;
//在這裡再算一下2的op次方
while
(op>0)
c=c*c;
op=op>>1;
}if(pl%sum1==0)
//以下是判斷從哪個區間開始查詢個數,仔細研究一下
if(pl%sum1!=0)
pl=oo*sum1;
ans=
(sum-pl)
/sum1+1;
}}ans=ans+kk;
//最後別忘了之前求的當x小於pl時的情況,記得加上kk哦
printf
("%lld\n"
,ans);}
return0;
}
輸入理想的程式,輸出快樂的人生
此中有真意
欲辨已忘言
共勉!
19山東省賽反思總結
這次的省賽,成績很不理想吧,只拿到了乙個銅牌,在最後的乙個小時裡,我們二選一,有兩個題目供我們選擇吧,乙個是傳遞閉包的,還有乙個是利用stl裡面的優先佇列解決的,我們選擇了前者,沒有做出來,很是遺憾吧,我們比賽的過程中,一開始出的題目還是可以的,因為都是水題,平時我們的水題罰時很高的,這次的我們就沒...
總結山東省賽2015
省賽總結 剛開始,暴力破解試題袋,三個人找水題做,我看的h,hms看a,zzh看的c,看出是做過的類似的博弈論,直接敲wa了,查bug沒有,加了個return 0,過了2y,這時再看榜,a題c題已經有許多過掉的,我和hms看a題,看完覺得簡單,就是個結構體排序,直接敲,過一遍樣例就交,結果wa,開始...
2019山東省賽補題
a題 題解 a題注意看清題目每月三十天每週五天很關鍵,因為每月星期幾是固定的。include define ll long long using namespace std const ll nl 1e5 5 ll a nl ll b nl ll c nl int main else if s tu...