洛谷 P2158 SDOI2008 儀仗隊

2021-07-22 15:30:58 字數 1147 閱讀 3362

題目描述

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

輸入輸出格式

輸入格式:

共乙個數n

輸出格式:

共乙個數,即c君應看到的學生人數。

輸入輸出樣例

輸入樣例#1:

4輸出樣例#1: 9說明

【資料規模和約定】

對於 100% 的資料,1 ≤ n ≤ 40000

【分析】

尤拉函式裸題。

尤拉函式只對正整數有意義,對於phi(n),表示的是小於n的並且與n互質的正整數個數,通式:

phi(n)=n(1-1/p1)(1-1/p2)……(1-1/pm)

其中p1,p2,……,pm表示n的質因數(但不會重複出現,即p1!=p2!=……!=pm,比如phi(18)=18(1-1/2)(1-1/3))

這道題裡面假設以觀察者為原點,可以發現他能看到的人符合下面的兩個特點:

1.要麼是特殊值((1,0),(1,1),,(0,1)),要麼橫縱座標互質

2.看到的人關於y=x對稱

所以我們可以對2~n-1求尤拉函式,將所得值相加,就表示除了三個特殊點以外在y=x的某一側上的可見點(具體原因建議你們畫圖)

然後假設得到的值是ans,則最終答案為ans*2+3

【**】

#include

#include

#include

#include

#define ll long long

#define fo(i,j,k) for(i=j;i<=k;i++)

using

namespace

std;

int phi[40001],p[40001];

bool vis[40001];

int n;

ll ans=1;

void get()

else phi[i*p[j]]=phi[i]*(p[j]-1);

}ans+=phi[i];

}}int main()

洛谷 P2158 SDOI2008 儀仗隊

題目描述 作為體育委員,c君負責這次運動會儀仗隊的訓練。儀仗隊是由學生組成的n n的方陣,為了保證隊伍在行進中整齊劃一,c君會跟在儀仗隊的左後方,根據其視線所及的學生人數來判斷隊伍是否整齊 如下圖 現在,c君希望你告訴他隊伍整齊時能看到的學生人數。輸入輸出格式 輸入格式 共乙個數n 輸出格式 共乙個...

洛谷P2158 SDOI2008 儀仗隊

這道題仔細觀察就會發現規律,設點的座標為 x,y 那麼y kx 求不同的k值 k y x要k值不同x,y肯定要互質 可以隨便觀察乙個點比如 1,4 或者 3,2 這些可以看見的點都是x,y互質 那麼轉化問題 怎麼才能求到這些點呢 因為x n y n 那麼就問題就變成了在小於n裡面可以找到互質多少個的...

洛谷P2158 SDOI2008 儀仗隊

作為體育委員,c君負責這次運動會儀仗隊的訓練。儀仗隊是由學生組成的n n的方陣,為了保證隊伍在行進中整齊劃一,c君會跟在儀仗隊的左後方,根據其視線所及的學生人數來判斷隊伍是否整齊 如下圖 現在,c君希望你告訴他隊伍整齊時能看到的學生人數。輸入格式 共乙個數n 輸出格式 共乙個數,即c君應看到的學生人...