51Nod2026 Gcd and Lcm-題解
【題目地址】
題意簡述
我們令,求下面式子在模後的值:
其中為最大公約數,為最小公倍數。
我們先來看一個例子:
求:
很容易知道,這個可以這樣變換:
所以我們看,原來的式子是否也能這樣變換。
首先我們可以知道(其中為狄利克雷卷積)。
由於積性函式的乘積以及狄利克雷卷積仍舊為積性函式,所以也為積性函式。
那麼我們考慮,對於一對,我們根據唯一分解定理,假設:
那麼可以寫成:
(其中是因為積性函式,在時(互質),所以將拆開)
那麼我們將屬於的放在一起,屬於的放在一起,可以得到:
所以就可以按照前面的例子的做法,將其分開變換後可以得到,原式等於:
那麼現在我們考慮如何求的字首和,由於,所以要用杜教篩。
我們看,,那麼我們令,則就等於:
那麼我們將其帶入杜教篩的公式,可以得到字首和等於:
我們預處理的字首和,然後杜教篩就好啦。
關於的線性篩,方法如下:
因為當中時,所以原式為:
根據積性函式定義:
所以這個題就可以在時間內解決了。
#include<map>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int M=1e6+10;
const ll Mod=1e9+7;
ll prime[M],mu[M],cnt;
bool vis[M];
ll F[M],c[M],f[M],inv_2;
ll fpow(ll a,ll b){
ll res=1;
for(;b;b>>=1,a=(a*a)%Mod){
if(b&1)res=(res*a)%Mod;
}
return res;
}
void init(){
inv_2=fpow(2,Mod-2);
F[1]=1;
for(ll i=2;i<M;i++){
if(!vis[i]){
prime[++cnt]=i;
F[i]=((1-i)%Mod+Mod)%Mod;
c[i]=i;f[i]=i;
}
for(ll j=1,v;j<=cnt&&i*prime[j]<M;j++){
v=i*prime[j];
vis[v]=1;
if(!(i%prime[j])){
c[v]=c[i]*f[i];f[v]=f[i];
F[v]=F[v/c[v]]*F[prime[j]]%Mod;
break;
}
F[v]=F[i]*F[prime[j]]%Mod;
c[v]=prime[j];f[v]=prime[j];
}
}
for(ll i=2;i<M;i++){
F[i]=(F[i-1]+F[i])%Mod;
}
}
ll S(ll x){return ((x*(x+1))%Mod)*inv_2%Mod;}
ll Sarea(ll L,ll R){return ((S(R)-S(L-1))%Mod+Mod)%Mod;}
map <ll,ll> mp;
ll calc(ll x){
if(x<M) return F[x];
if(mp.count(x)) return mp[x];
ll ans=x;
for(ll i=2,j;i<=x;i=j+1){
j=(x/(x/i));
ans=(ans-(Sarea(i,j)*calc(x/i))%Mod)%Mod;
}
if(ans<0)ans+=Mod;
return mp[x]=ans;
}
ll n;
ll Sqr(ll a){return a*a%Mod;}
int main(){
scanf("%lld",&n);
init();
printf("%lld\n",Sqr(calc(n)));
return 0;
}
End
相關文章
- GCD 原理詳解GC
- iOS GCD詳解iOSGC
- 【10.22 牛客普及(三)】 牛半仙的妹子gcd 題解GC
- GCD Inside: GCD 宏GCIDE
- Swift GCD 瞭解一下SwiftGC
- iOS 中的 GCD 實現詳解iOSGC
- iOS多執行緒:GCD詳解iOS執行緒GC
- GCD Inside: GCD 資料結構GCIDE資料結構
- GCD SUMGC
- GCD CountingGC
- GCD QueriesGC
- gcd思維_cfECR107_B. GCD LengthGC
- 奇怪的GCDGC
- gcd與exgcdGC
- iOS GCD入門和GCD對CPU多核的使用iOSGC
- GCD 死鎖原因GC
- G. GCD on a gridGC
- [bzoj2818]gcdGC
- P2568 GCDGC
- 多執行緒——GCD執行緒GC
- GCD 學習總結GC
- 又見GCD hd 2504GC
- GCD 中Group的使用GC
- GCD(三) dispatch_groupGC
- GCD(四) dispatch_semaphoreGC
- GCD原始碼原理分析GC原始碼
- [LOJ6491] zrq 的 gcdGC
- 分數的GCD和LCMGC
- Codeforces1493D GCD of an Array3DGC
- iOS 多執行緒之GCDiOS執行緒GC
- 關於GCD多工處理GC
- iOS多執行緒GCD篇iOS執行緒GC
- GCD裡的全域性佇列GC佇列
- GCD計時器替換NSTimerGC
- IOS多執行緒之(GCD)iOS執行緒GC
- 深入理解GCD之dispatch_queueGC
- 深入理解GCD之dispatch_groupGC
- iOS使用GCD實現一個TimeriOSGC