求滿足方程ax
≡xa(
mod2n)
的解的個數 n≤
30,a≤
109詢問組數t≤
1000
引理一:若a,
b 均為奇數,且a2
k+1≡
b2k+
1(mod2n)
,則a≡
b(mod2n)
證明: ∵a
2k+1
≡b2k
+1(mod2n
) ∴a
2k+1
−b2k
+1≡0
(mod2n
) ∴(
a−b)
(a2k
+a2k
−1b+
a2k−
2b2+
⋯+b2
k)≡0
(mod2n
) 由於a
2k+a
2k−1
b+a2
k−2b
2+⋯+
b2k 為奇數項奇數之和,為奇數 a2
k+a2
k−1b
+a2k
−2b2
+⋯+b
2k≡/0
(mod2n
) ∴a
−b≡0
(mod2n
) ∴a
≡b(mod2n
) 引理二:若
a 為奇數,
n為大於2的正整數,則a2
n−2≡
1(mod2n)
證明: 當n
=3時,顯然成立 當n
=k時成立,即a2
k−2≡
1(mod2k)
則a2k−2≡
1或2k
+1(mod2k
+1)
又∵12
≡1(mod2k
+1),
(2k+
1)2≡
22k+
2×2k
+1≡1
(mod2k
+1)
∴a2k
−1≡(
a2k−
2)2≡
1(mod2k+
1)故當n=
k+1 時也成立
引理三:當
a 為奇數時,解在模意義下唯一,為am
od2n
證明: ∵a
x≡xa
(mod2n
) ∴a
x≡xa
(mod2n
−1)a
x≡xa
(mod2n
−2)⋯
ax≡x
a(mod2)
∴a,x
均為奇數
∵當a為奇數時
,a2≡
1(mod4),
a2≡1
(mod8)
∴ax≡a
(mod4)
,ax≡
a(mod8)
xa≡x
(mod4)
,xa≡
x(mod8)
∴a≡x
(mod4)
,a≡x
(mod8)
下證當m=1
,2,3
…,k(
3≤k時均有 a≡
x(mod2m)
則當m=
k+1 時,a≡
x(mod2m)
亦成立
由引理二得a2
k−1≡
1(mod2k+
1) 設
a≡x≡
c(mod2k−
1) ∴
ac≡a
x≡xa
≡xc(
mod2k+
1) 由
∵a,x
均為奇數 ∴c
為奇數
由引理一得a≡
x(mod2k+
1)故當m=
k+1 時,a≡
x(mod2m)
成立故x
≡a(mod2n
) (考場上只會打表找規律的我對此證明表示,「呵呵」)
好那麼當
a 為奇數時輸出1即可 當a
為偶數時易得ax
≡0(mod230
)(x≥
30)顯然對於任意n≤
30 ,均有ax
≡0(mod2n
)(x≥
30)那麼對於小於30的
x 我們暴力找即可
對於大於30的
x,必有xa
≡0(mod2n
) xa
≡0(mod2n
) 的充要條件為 x≡
0(mod2⌈n
a⌉)
暴力統計即可
**
#include
#define len
using
namespace
std;
inline
long
long getint()
while(isdigit(c))
return x*p;
}inline
void putint(long
long x)
static
long
long buf[22];
long
long tot=0;
dowhile(x);
while(tot)putchar(buf[--tot]+'0');
}inline
long
long ksm(long
long a,long
long b,long
long c)
return ans;
}inline
void work(long
long a,long
long n)
long
long mod=1
long ans=0;
for(long
long i=1;i<=30;++i)
long
long need=(n-1)/a+1,n2=1
<30/n2;
putint(ans),putchar('\n');
}int main()
return
0;}
NOIP模擬(20171024)T2 乘積
求從1 n中選k個數,使得這k個數的乘積不含完全平方因子 70 n 30 100 n 500 狀壓dp,f i j k 表示前i個數,選了j個,當前所選數之積分解質因數後的狀態為k k表示成二進位制後,第一位表示有沒有2,第二位表示有沒有3 以此類推 令i 1分解質因數後狀態為po s i 1 f ...
NOIP模擬(10 30)T1 比賽
比賽 題目背景 10.30 noip 模擬t1 分析 暴力 將資料從小到大排序,從大到小找到第乙個滿足 a i k a i 1 的位置,那麼答案就是 n i 了,如果找不到那麼就是 n了 注意邊界 source created by scarlyw include include include i...
NOIP模擬(20171031)T3 紙帶
有乙個紙帶 每次區間染色,同乙個地方後染的顏色覆蓋先染的,求最後紙帶上顏色種類數。咦,這不是線段樹嗎?咦,倒過來做好像很方便啊?咦,離散化有坑?區間塗色,若該顏色所在區間均被染色,則該顏色按原順序操作後會被後面的顏色覆蓋 注意離散化 本來三個顏色3 8,2 5,7 9,最後6號點上顏色是1 離散化後...