bzoj2818: Gcd(尤拉函式)
題目傳送門
其實我早就看到這道題了只不過不會做。
結果今天上午我學了尤拉函式。
所以又一次看到這道題就把它做了。
解法:
對於每一個質數p,gcd(x,y)=p
我們將x和y都除以p,那麼他們的gcd就等於1了。
所以列舉每一個質數,將n除以p。
這就轉化為了在n/p中求互質的對數。
上午學的尤拉函式就派上用場了。
phi[x]表示小於等於x且跟x互質的數的個數。
那麼n/p中互質的對數就等於所有的phi[x]相加的和*2-1。
所有的phi[x]相加想必大家清楚,*2相當於兩個數調換位置。
-1相當於減去1,1多算的重複的那一次。
然後處理出phi[x]的字首和。
然後加一下每個質數的答案就行了。
程式碼實現:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
ll prime[1100000],phi[11000000];
int n,len;
void get_phi() {
phi[1]=1;len=0;
for(int i=2;i<=n;i++) {
if(phi[i]==0) {
prime[++len]=i;
phi[i]=i-1;
}
for(int j=1;j<=len&&i*prime[j]<=n;j++) {
int t=i*prime[j];
if(i%prime[j]==0) {
phi[t]=phi[i]*prime[j];
break;
}
phi[t]=phi[i]*(prime[j]-1);
}
}
}
ll s[11100000];
int main() {
scanf("%d",&n);
get_phi();
for(int i=1;i<=n;i++) {
s[i]=s[i-1]+phi[i]; //字首和
}
ll ans=0;
for(int i=1;i<=len;i++) {
ans+=s[n/prime[i]]*2-1;
}
printf("%lld\n",ans);
return 0;
}
相關文章
- HDU2588GCD(尤拉函式)GC函式
- [bzoj2818]gcdGC
- HDU 1695-GCD(容斥原理+尤拉函式)GC函式
- BZOJ 2818 Gcd (莫比烏斯反演 或 尤拉函式)GC函式
- 尤拉函式φ函式
- 4939 尤拉函式函式
- 尤拉函式入門函式
- 尤拉函式詳解函式
- poj 2478 尤拉函式函式
- 淺談尤拉函式函式
- FZU 1969 && UVA 11426 GCD Extreme (尤拉函式 或 莫比烏斯反演)GCREM函式
- GCD、dispatch 函式介紹GC函式
- 尤拉函式性質和模版函式
- 轉載:尤拉函式知識點總結及程式碼模板及尤拉函式表函式
- iOS-GCD常用函式和柵欄函式iOSGC函式
- Note -「因數的尤拉函式求和」函式
- POJ 2478-Farey Sequence(尤拉函式)函式
- B.日記和尤拉函式函式
- 尤拉計劃512題(冪的尤拉總計函式和)函式
- POJ 2048 Longge's problem (尤拉函式 積性函式)函式
- HDU 4002Find the maximum(尤拉函式)函式
- POJ 2407-Relatives-尤拉函式函式
- [藍橋杯][演算法提高VIP]尤拉函式演算法函式
- HDU 3501 Calculation 2 (尤拉函式應用)函式
- 51nod1262 扔球(尤拉函式)函式
- 尤拉函式、整除分塊和擴充套件歐幾里得函式套件
- §3. 復變數的指數函式·尤拉公式變數函式公式
- 尤拉計劃533題:卡邁克爾函式函式
- POJ2487Farey Sequence(尤拉函式&&法雷級數)函式
- HDU3501 Calculation 2(尤拉函式推廣)函式
- 51nod1040 最大公約數之和 (尤拉函式 )函式
- 紫書 例題 10-27 UVa 10214(尤拉函式)函式
- bzoj2190: [SDOI2008]儀仗隊(尤拉函式)函式
- 尤拉公式——真正的宇宙第一公式公式
- 素數個數 <埃式篩 && 尤拉篩>
- 數論線性篩總結 (素數篩,尤拉函式篩,莫比烏斯函式篩,前n個數的約數個數篩)函式
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- P2303 [SDOI2012] Longge 的問題(尤拉函式,推式子)函式