早上
5
5
5 点多就醒了,然后回笼觉到到
6
6
6 点多(瞬间倒下)
但是早上还是有点犯困
昨天的方便面并不是太合口味,另一桶一样口味的找jyn神犇换成了myf大佬最喜欢的鲜虾鱼极面
跪谢jyn!许昌友人!
然后没吃早饭就过来刷题
直接写了个紫题P4139 上帝与集合的正确用法
感觉很水,直接套扩展欧拉定理
a
b
≡
a
b
m
o
d
φ
(
p
)
+
φ
(
p
)
(
m
o
d
p
)
a^b\equiv a^{b\;mod\;φ(p)+φ(p)}\;(mod\;p)
ab≡abmodφ(p)+φ(p)(modp)
先筛出来数据范围内的欧拉数,然后写个递归直到
φ
(
p
)
=
1
φ(p)=1
φ(p)=1,感觉是很水的一个数论紫题
#include<bits/stdc++.h>
using namespace std;
#define N 10000010
#define int unsigned long long
int euler[N],T,p,cnt,primes[N];
bool st[N];
int ksm(int a,int b,int p,int sum)
{
for(;b;b>>=1)
{
if(b&1)sum=(sum*a)%p;
a=(a*a)%p;
}
return sum;
}
void get_eulers(int ol)
{
euler[1]=1;
for(int i=2;i<=ol;i++)
{
if(!st[i])
{
primes[cnt++]=i;
euler[i]=i-1;
}
for (int j=0;primes[j]<=ol/i;j++)
{
int t=primes[j]*i;
st[t]=true;
if (i%primes[j]==0)
{
euler[t]=euler[i]*primes[j];
break;
}
euler[t]=euler[i]*(primes[j]-1);
}
}
}
int ans(int mod)
{
if(mod==1)return mod-1;
return ksm(2,ans(euler[mod])+euler[mod],mod,1);
}
signed main()
{
scanf("%lld",&T);
get_eulers(10000000);
while(T--){scanf("%lld",&p);printf("%lld\n",ans(p));}
return 0;
}
但是一开始把快速幂不小心敲成了龟速乘,然后查错查了半天,太自闭了
今天是郑外的大佬讲课,很快,数学方面的知识点我在总结,不在这边具体说了,但是这个老师经常提lch大佬,我感觉对lch有什么特殊的情感。
不过说起来他也真是强,虽然铜牌(显然我连省队都不见得能进),但是高考还是考了
692
692
692 分,太强了。
晚上又写了P2303 [SDOI2012] Longge 的问题
一开始是化简出来了
∑
i
=
1
n
(
i
,
n
)
=
∑
d
∣
n
n
φ
(
n
d
)
×
d
\sum\limits^n_{i=1}(i,n)=\sum\limits_{d|n}^nφ(\frac n d)\times d
i=1∑n(i,n)=d∣n∑nφ(dn)×d
然后准备写个欧拉筛,再找一下质因子,水过去,但是找质因子感觉太麻烦了,而且
n
≤
2
32
n\le 2^{32}
n≤232 ,于是去看了洛谷第一篇题解打链接博客https://www.cnblogs.com/PinkRabbit/p/8278728.html,写的是真详细,于是就
A
A
A 了
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
int ans(int x)
{
int sum=x;
for(int i=2;i*i<=x;i++)
if(x%i==0)
{
int b=0;
while(x%i==0){x/=i;b++;}
sum/=i;
sum*=b*i-b+i;
}
if(x>1){sum/=x;sum*=x+x-1;}
return sum;
}
signed main()
{
scanf("%lld",&n);printf("%lld",ans(n));
return 0;
}
不过仔细一想,如果是筛到
n
\sqrt n
n 的话,然后用试除法应该也能过。
不对,说错了,仔细一想还是不对劲,不行
最后磕狄利克雷卷积到睡觉