bzoj 2190: [SDOI2008]仪仗队 线性欧拉函数
生活随笔
收集整理的這篇文章主要介紹了
bzoj 2190: [SDOI2008]仪仗队 线性欧拉函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2190: [SDOI2008]儀仗隊
Time Limit:?10 Sec??Memory Limit:?259 MB[Submit][Status][Discuss]
Description
作為體育委員,C君負責這次運動會儀仗隊的訓練。儀仗隊是由學生組成的N * N的方陣,為了保證隊伍在行進中整齊劃一,C君會跟在儀仗隊的左后方,根據其視線所及的學生人數來判斷隊伍是否整齊(如下圖)。 ?? 現在,C君希望你告訴他隊伍整齊時能看到的學生人數。
Input
共一個數N。
Output
共一個數,即C君應看到的學生人數。
Sample Input
4Sample Output
9HINT
?
【數據規模和約定】 對于 100% 的數據,1 ≤ N ≤ 40000
思路:求gcd(x,y)==1 ?1<=x,y<=N;
? ans=2*sigma(phi[i])+2-1;
ps:我以為N==1的時候為0;然而并沒有1這樣的數據;
#include<bits/stdc++.h> using namespace std; #define ll long long #define esp 1e-10 const int N=1e5+10,M=1e6+10,mod=1e9+7,inf=1e9+10; ll p[M],ji; bool vis[M]; ll phi[M]; void get_eular(int n) {ji = 0;memset(vis, true, sizeof(vis));for(int i = 2; i <= n; i++){if(vis[i]){p[ji ++] = i;phi[i] = i - 1;}for(int j = 0; j < ji && i * p[j] <= n; j++){vis[i * p[j]] = false;if(i % p[j] == 0){phi[i * p[j]] = phi[i] * p[j];break;}elsephi[i * p[j]] = phi[i] * phi[p[j]];}} } ll sumphi[M]; int main() {ll x,y,z,i,t;get_eular(40100);phi[1]=1;sumphi[0]=0;for(i=1;i<=40000;i++)sumphi[i]=sumphi[i-1]+phi[i];while(~scanf("%lld",&x)){if(x==1)printf("0\n");elseprintf("%lld\n",2*sumphi[x-1]+1);}return 0; }?
轉載于:https://www.cnblogs.com/jhz033/p/5702839.html
總結
以上是生活随笔為你收集整理的bzoj 2190: [SDOI2008]仪仗队 线性欧拉函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OSI模型和TCP/IP模型
- 下一篇: JQuery面试题1