題目描述
作為體育委員,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君應看到的學生人...