为了写这个题学习的亚线性求区间质数个数 写完这个题真的玉玉了
思路参考第一篇题解。
题目大意是问 [0,L(n)) 中有多少个数 i 满足 imod2,imod3,…,imodn 两两不同。其中 L(n)=lcm(1,2,3,…,i)。
首先有一种很简单的方法(最喜欢的):写一个暴力然后瞪眼找规律,可以很容易的发现答案。
正确做法:
首先根据山茶的《奥赛经典 · 初中数学竞赛中的数论问题》可以得到:
Lemma 1 若 x≡a(mod p),则 x≡pl+a(mod p)。
Proof 对于 x≡a(mod p) 根据同余的基本性质可以得到若得到 x≡b(mod p) 则相加得到 x≡a+b(mod p)。此时构造 x≡pl≡0(mod p),将原式与上述式子相加得到 x≡pl+a(modp),得证。
考虑现在知道 x 是一个满足条件的解,则:
- 若 x≡1(mod 2),则根据数论知识得到 x≡1,3(mod 4)。为保证 xmod2=xmod4,所以得到 x≡3(mod 4),同理此时 x≡(2k−1)(mod 2k)。
- 否则有 x≡0(mod 2),则根据数论知识得到 x≡0,2(mod 4))。为保证 xmod2=xmod4,所以得到 x≡2(mod 4),同理此时 x≡(2k−2)(mod 2k)。
mod 3、mod 5 的情况同理。所以:
Lemma 2 若目前已知 xmodp 的值,则 xmodkp(k∈N+) 的情况必然确定。
Proof 若 xmodp=q(0≤q<p 且 q∈N),则 xmod2p 的取值仅可以为 q,q+p,为保证互不相同条件需有 。同理 xmod3p 的取值仅可以为 q,q+p,q+2p,以此类推。得到 xmodkp 的取值仅可以为 q,q+p,q+2p,…,q+(k−1)p。回顾行列式上三角矩阵求值方法/大雾,xmodp=q,则 xmod2p 为和 xmodp 不同必须满足 xmod2p=q,即 xmod2p=q+p。同理 xmod3p=q+2p,…,xmodkp=q+(k−1)p。因此构造出了唯一满足条件的解并证明引理 2。
然后考虑 xmod2 的值确定,就可以确定出 xmod(2×3) 即 xmod6 的值。若 xmod6=q,则考虑用 xmod3 的值反推答案。令 xmod3=p,则 xmod6 只能取 p 和 p+3。目前已经知道 xmod6 的值为 p 或者 p+3,显然可以反推出 xmod3 的值为 p 或者 p+3 中不为 xmod6 的那个值。也就是说:xmod2 的值已知,那么可以得到 xmod3 的值。
Lemma 3 若 xmodp 的值已知,且 lcm(p,q)≤n,则可以用 xmodp 的值直接唯一确定 xmodq 的值。
Proof 首先可以用 xmodp 的值直接唯一确定 xmodlcm(p,q) 的值,然后考虑根据 xmodlcm(p,q) 的值直接反推出 xmodkq 的值(k∈N 且 kq≤n),发现 xmodkq 的值都可以使用上述方法唯一确定。因此得证。
然后考虑什么数不可以使用 Lemma 3 来确定。发现若 p≥⌊2n⌋+1 则 xmodp 的值没法被唯一确定。考虑继续分类讨论:
- x≡0(mod 2)。此时继续分类讨论:
- 若 n 不为质数则手摸一会儿可以发现对于每一个剩下的质数都有一组唯一的配对方案,因此答案为 1。
- 否则 xmodn 的情况多一组配对方案,因此答案为 1+1=2。
- x≡1(mod 2)。此时发现剩下的每一个质数都恰好有两种不同的配对方案。因此设在 [⌊2n⌋+1,n] 中有 C 个质数,则恰好有 2C 种不同的配对方案。和 n 是否为质数无关。
总结:
F(n)={2C+22C+1n∈primen∈prime
然后高兴的发现 n 为 2×109,直接数区间素数过不了……
考虑 SD NOIP2023 赛前九连测 Day7 T2 的做法,使用如 Meissel-Lehmer 或者 Min-25 筛等亚线性做法求解,判断 n 是否为质数不需要 Miller-rabin 直接 O(n) 暴力判断,即可以通过。
核心代码:
void solve(unsigned int __testid=1){
// cerr<<"Pi(10)="<<lehmer(10)<<'\n';
int n;cin>>n;
int cnt=lehmer(n)-lehmer(n/2);
cnt%=mod;
cnt=ksm(2,cnt,mod);
if(chk(n))cnt+=2;
else ++cnt;
cnt%=mod;
cout<<cnt<<'\n';
}
喜欢的话,留下你的评论吧~