求a
ba^b
ab的所有約數之和,答案對9901取模
首先a =p
1c1p
2c2p
3c3p
4c4…
…a=p_1^p_2^p_3^p_4^……
a=p1c1
p2
c2
p3c3
p4
c4
……所以a b=
(p1c
1p2c
2p3c
3p4c
4……)
ba^b=(p_1^p_2^p_3^p_4^……)^b
ab=(p1
c1
p2c2
p3
c3
p4c4
……
)b= p1
c1×b
p2c2
×bp3
c3×b
p4c4
×b……
=p_1^p_2^p_3^p_4^……
=p1c1
×bp
2c2
×bp
3c3
×bp
4c4
×b…
…然後,使用了下面這兩個程式進行推導
#include
using
namespace std;
int a,b,n,s;
signed
main()
printf
("\n%d"
,s);
}
依靠上面這個,推出了a+a
b+ab
2+ab
3……+
abn=
a×bn
−1b−
1a+ab+ab^2+ab^3……+ab^n=a\times \frac
a+ab+a
b2+a
b3……
+abn
=a×b
−1bn
−1
#include
#include
using
namespace std;
int n,s,a[
10001
],len;
signed
main()
sort
(a+1
,a+1
+len)
;printf
("%d\n"
,s);
for(
register
int i=
1;i<=len;i++
)printf
("%d "
,a[i]);
}
靠上面這兩個就推出了質數的n
nn次方只能是這個質數的1
11到n
nn次方的和,也就是乙個等比數列
根據這個性質,我們把每個數分解成質因數,分別求解並相乘
注意判斷沒有逆元的情況
#include
#include
#define ymw 9901
using
namespace std;
long
long a,b,x,p[
1000001
],c[
1000001
],lenp,ans=1;
inline
long
long
ksm(
long
long x,
long
long y)
inline
long
longdb(
long
long bi,
long
long len)
signed
main()
if(x!=
1) p[
++lenp]
=x,c[lenp]=1
;for
(register
int i=
1;i<=lenp;i++
) c[i]
=c[i]
*b+1
;for
(register
int i=
1;i<=lenp;i++)if
((p[i]-1
)%ymw==
0)ans=ans*c[i]
%ymw;
else
(ans*=db
(p[i]
,c[i]
)%ymw)
%=ymw;
printf
("%lld"
,ans)
;}
2023年10月29日提高組 T1 A
n nn個球,m mm個盤,盤子不能空,求本質上不相同的方案數 首先深搜 include using namespace std int n,m,ans inline void dfs register int dep,register int sy,register int last 分完了,統計...
2023年10月30日提高組 T1 A
求樹上聯通快中最大值與最小值之差為k kk的方案數 設最大值與最小值之差為xxx x xx正好為k kk的方案數 x k x leq k x k 的方案數 x x k的方案數 於是我們就可以樹形dpdp dp啦fi fs on 1 f i prod f 1 fi fson 1 include def...
2023年10月31日提高組 T1 A
求n nn的排列了交換為公升序的最小交換次數的期望 兩種思路 暴力打表找規律 動態規劃 第一種只需要打乙個bfs bfsbf s hash hash hash include include define p 10000007 using namespace std int n,ans struct...