日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

bzoj2190 [SDOI2008]仪仗队(欧拉函数)

發布時間:2025/4/16 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bzoj2190 [SDOI2008]仪仗队(欧拉函数) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2190: [SDOI2008]儀仗隊

Time Limit:?10 Sec??Memory Limit:?259 MB
Submit:?3203??Solved:?2062
[Submit][Status][Discuss]

Description

  作為體育委員,C君負責這次運動會儀仗隊的訓練。儀仗隊是由學生組成的N * N的方陣,為了保證隊伍在行進中整齊劃一,C君會跟在儀仗隊的左后方,根據其視線所及的學生人數來判斷隊伍是否整齊(如下圖)。   ??  現在,C君希望你告訴他隊伍整齊時能看到的學生人數。

Input

  共一個數N。

Output

  共一個數,即C君應看到的學生人數。

Sample Input

  4

Sample Output

  9


HINT

【數據規模和約定】   對于 100% 的數據,1 ≤ N ≤ 40000

?

/* 可以將最左下的點標為(0,0), 那么顯然如果存在一個點(x,y), 且有gcd(x; y) = k (k .= 1), 那么點(x/k,y/k) .定會將點(x,y) 擋住. 如果k = 1, 那么點(x, y) .定會被看到 所以點(x, y)被看到的充分必要條件是Gcd(x, y) == 1; 我們考察矩陣的下三角形,考察他的每一行,可以發現,這一行能夠被看到的點的數目就是phi(x) 答案不難發現是∑(phi[x])*2+1(容斥原理) */ #include<iostream> #include<cstdio> #include<cstring>#define N 50007using namespace std; int prime[N]; bool not_prime[N]; int n,ans,tot=1;void pr_() {prime[1]=2;not_prime[1]=true;for(int i=2;i<=N;i++){if(!not_prime[i]) prime[++tot]=i;for(int j=1;j<=tot && i*prime[j]<=N;j++){not_prime[i*prime[j]]=true;if(i%prime[j]) break;}} }int get_phi(int x) {int ret=1;for(int i=1;prime[i]*prime[i]<=x;i++){if(x%prime[i]==0){ret*=prime[i]-1;x/=prime[i];while(x%prime[i]==0) x/=prime[i],ret*=prime[i];}}if(x>1) ret*=x-1;return ret; }int main() {scanf("%d",&n);pr_();for(int i=1;i<n;i++) ans+=get_phi(i);ans*=2;ans+=1;printf("%d\n",ans);return 0; }

?

轉載于:https://www.cnblogs.com/L-Memory/p/7241727.html

總結

以上是生活随笔為你收集整理的bzoj2190 [SDOI2008]仪仗队(欧拉函数)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。