題目大意:給你n,求出乙個n*n的人陣,你站在左下角,最多可以看到多少人
題解:轉換一下,就成了求(n-1)*(n-1)中有多少個x,y軸互素的座標,然後加上你上面的,你右邊的,你右上方的三個人。
用尤拉篩篩出n及以內的質數,尤拉篩最大特點是它的時間複雜度是o(n)的(它還可以求出phi,即比它小的與它互質的數的個數)。它是先迴圈用第幾個質數,再迴圈是它的幾次。
設i是第一重迴圈,j是第二重迴圈,那麼尤拉篩會在primelist[j]|i時會退出,這保證了每個合數會被它的乙個質因數篩掉,用這個特性也可以求phi,如果i是質數,phi[i]=i-1;如果primelist[j]|i,phi[i*primelist[j]]=phi[i]*primelist[j];不然,phi[i*primelist[j]]=phi[i]*phi[primelist[j]]。
最後,我們可以把2~n-1的phi加起來,再*2+3就是解。
c++ code:
#include#includeconst int maxn=40100;using namespace std;
long long n,size,ans;
int phi[maxn],plist[maxn];
bool prime[maxn];
void getprime()
for (int j=1;j<=size&&plist[j]*iphi[i*plist[j]]=phi[i]*phi[plist[j]];}}
}int main()
洛谷 P2158 SDOI2008 儀仗隊
題目描述 作為體育委員,c君負責這次運動會儀仗隊的訓練。儀仗隊是由學生組成的n n的方陣,為了保證隊伍在行進中整齊劃一,c君會跟在儀仗隊的左後方,根據其視線所及的學生人數來判斷隊伍是否整齊 如下圖 現在,c君希望你告訴他隊伍整齊時能看到的學生人數。輸入輸出格式 輸入格式 共乙個數n 輸出格式 共乙個...
洛谷 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裡面可以找到互質多少個的...