日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

YbtOJ-选点构形【欧拉函数】

發(fā)布時(shí)間:2023/12/3 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 YbtOJ-选点构形【欧拉函数】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

正題

題目鏈接:https://www.ybtoj.com.cn/contest/351/problem/1


題目大意

一個(gè)圓上,你需要在3~n3\sim n3n中選出kkk個(gè)作為aia_iai?,然后再圓上選擇最少的點(diǎn)使得對(duì)于每個(gè)aia_iai?你都能用選出的點(diǎn)連成一個(gè)正aia_iai?邊形。

k+2≤n≤106k+2\leq n\leq 10^6k+2n106


解題思路

首先我們固定一個(gè)000點(diǎn)因?yàn)榭隙ㄋ械恼?span id="ozvdkddzhkzd" class="katex--inline">aia_iai?邊形都交于一個(gè)點(diǎn)。

然后考慮對(duì)于一個(gè)aia_iai?,我們需要的點(diǎn)就是1ai×k(0≤k<ai)\frac{1}{a_i}\times k(0\leq k<a_i)ai?1?×k(0k<ai?)

注意到一個(gè)aia_iai?如果存在一個(gè)aj=k×aia_j=k\times a_iaj?=k×ai?那么aia_iai?就不會(huì)產(chǎn)生貢獻(xiàn)。反過(guò)來(lái)說(shuō)aja_jaj?的貢獻(xiàn)會(huì)減少aia_iai?

而我們肯定是優(yōu)先選擇aia_iai?的,也就是說(shuō)aja_jaj?選擇當(dāng)且僅當(dāng)它的所有約數(shù)都被選擇,而此時(shí)aja_jaj?產(chǎn)生的貢獻(xiàn)恰好就是φ(aj)\varphi(a_j)φ(aj?)(因?yàn)樗?span id="ozvdkddzhkzd" class="katex--inline">aja_jaj?約數(shù)產(chǎn)生的貢獻(xiàn)和為aja_jaj?,我們可以視為它們的貢獻(xiàn)都單獨(dú)為φ(x)\varphi(x)φ(x)

那么我們可以把3~n3\sim n3n按照φ\(chéng)varphiφ排序從小到大加就好了。

至于1,21,21,2,特判一下比較小的情況就可以了,kkk比較大時(shí)顯然1,21,21,2會(huì)被選上去,需要多選222個(gè)。

時(shí)間復(fù)雜度:O(nlog?n)O(n\log n)O(nlogn)


code

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=1e6+10; int n,k,cnt,phi[N],pri[N/10]; bool v[N]; int main() {freopen("point.in","r",stdin); freopen("point.out","w",stdout);scanf("%d%d",&n,&k);if(k==1)return puts("3")&0;if(k==2)return puts("6")&0;phi[1]=1;for(int i=2;i<=n;i++){if(!v[i])phi[i]=i-1,pri[++cnt]=i;for(int j=1;j<=cnt&&i*pri[j]<=n;j++){v[i*pri[j]]=1;if(i%pri[j]==0){phi[i*pri[j]]=phi[i]*pri[j];break;}phi[i*pri[j]]=phi[i]*phi[pri[j]];}}sort(phi+1,phi+1+n);long long ans=0;for(int i=1;i<=k+2;i++)ans+=phi[i];printf("%lld\n",ans);return 0; }

總結(jié)

以上是生活随笔為你收集整理的YbtOJ-选点构形【欧拉函数】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。