思路:若n是質數p的k次冪(即n=p^k),φ(n)=p^k-p^(k-1)=(p-1)p^(k-1)。若m,n互質,φ(mn)=(m-1)(n-1)=φ(m)φ(n)。運用尤拉函式這兩個性質可以將問題化簡成求最大公約數是1~min(m,n)這些數的個數。
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const ll inff = 0x3f3f3f3f3f3f3f3f;
#define for(i,a,b) for(int i(a);i<=(b);++i)
#define fol(i,a,b) for(int i(a);i>=(b);--i)
#define rew(a,b) memset(a,b,sizeof(a))
#define inf int(0x3f3f3f3f)
#define si(a) scanf("%d",&a)
#define sl(a) scanf("%i64d",&a)
#define sd(a) scanf("%lf",&a)
#define ss(a) scanf("%s",a)
#define mod ll(998244353)
#define pb push_back
#define lc d<<1
#define rc d<<1|1
#define pll pair#define p pair#define pi acos(-1)
ll phi[1000008],p[1000008],tot,n,m,inv[1000008],pr[1000008>>2],mo,f[1000008];
void gphi(int n)
else phi[i*pr[j]]=phi[i]*(pr[j]-1);}}
}int main()
cout《附帶乙份莫比烏斯的:
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const ll inff = 0x3f3f3f3f3f3f3f3f;
#define for(i,a,b) for(int i(a);i<=(b);++i)
#define fol(i,a,b) for(int i(a);i>=(b);--i)
#define rew(a,b) memset(a,b,sizeof(a))
#define inf int(0x3f3f3f3f)
#define si(a) scanf("%d",&a)
#define sl(a) scanf("%i64d",&a)
#define sd(a) scanf("%lf",&a)
#define ss(a) scanf("%s",a)
#define mod ll(998244353)
#define pb push_back
#define lc d<<1
#define rc d<<1|1
#define pll pair#define p pair#define pi acos(-1)
ll pr[1000008],mu[1000008],tot,a,n,c,m,k,phi[1000008],p[1000008],mo,inv[1000008];
bool vis[1000008];
void mobious(int n)
else mu[k]=-mu[i];}}
}void gphi(int n)
else phi[i*pr[j]]=phi[i]*(pr[j]-1);}}
}ll as(ll n,ll m)
int main()
return 0;
}
再習尤拉 線性 篩素數
尤拉篩,是一種可以o n 篩出1 n範圍內的素數的篩法,比 篩的o nlogn 埃式篩的o nloglogn 都要快一些,還可以根據題目搞出一些最大約數啊之類的東西 void euler pick int n p是用於儲存素數的 相信你可能對於 i p j 0,break 這句話有疑問 首先你要知道...
HDU 尤拉迴路
problem description 尤拉迴路是指不令筆離開紙面,可畫過圖中每條邊僅一次,且可以回到起點的一條迴路。現給定乙個圖,問是否存在尤拉迴路?input 測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別是節點數n 1 n 1000 和邊數m 隨後的m行對應m條邊,每行給出...
hdu5348 尤拉迴路 尤拉路徑
題意 n個點m條邊的無向圖,問是否滿足將所有邊變為有向後,每個點入度和出度的點不超過1 include include include include include using namespace std struct nodeg 1000005 int cnt,sign,deg 200005 h...