码迷,mamicode.com
首页 > 其他好文 > 详细

【SDOI 2008】 仪仗队

时间:2018-07-09 14:13:27      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:problem   code   clu   cti   使用   efi   online   \n   lex   

【题目链接】

             https://www.lydsy.com/JudgeOnline/problem.php?id=2190

【算法】

           同POJ3090

           值得注意的是此题数据规模较大,建议使用用线性筛筛出欧拉函数

【代码】

           

#include <algorithm>  
#include <bitset>  
#include <cctype>  
#include <cerrno>  
#include <clocale>  
#include <cmath>  
#include <complex>  
#include <cstdio>  
#include <cstdlib>  
#include <cstring>  
#include <ctime>  
#include <deque>  
#include <exception>  
#include <fstream>  
#include <functional>  
#include <limits>  
#include <list>  
#include <map>  
#include <iomanip>  
#include <ios>  
#include <iosfwd>  
#include <iostream>  
#include <istream>  
#include <ostream>  
#include <queue>  
#include <set>  
#include <sstream>  
#include <stdexcept>  
#include <streambuf>  
#include <string>  
#include <utility>  
#include <vector>  
#include <cwchar>  
#include <cwctype>  
#include <stack>  
#include <limits.h>
using namespace std;
#define MAXN 40010

int i,n,TC,T;
int sum[MAXN];

inline void init()
{
        int i,j,tmp,cnt = 0;
        static int f[MAXN],prime[MAXN],phi[MAXN];
        for (i = 2; i < MAXN; i++)
        {
                if (!f[i]) 
                {
                        f[i] = prime[++cnt] = i;
                        phi[i] = i - 1;
                }
                for (j = 1; j <= cnt; j++)
                {
                        tmp = i * prime[j];
                        if (tmp >= MAXN) break;
                        f[tmp] = prime[j];
                        if (prime[j] == f[i])
                        {
                                phi[tmp] = phi[i] * prime[j];
                                break;        
                        }    else phi[tmp] = phi[i] * (prime[j] - 1);
                }        
        }        
        for (i = 1; i < MAXN; i++) sum[i] = sum[i-1] + phi[i];
}

int main() 
{
    
        init();
        scanf("%d",&n);
        printf("%d\n",2*sum[n-1]+3);
        
        return 0;
    
}

 

【SDOI 2008】 仪仗队

标签:problem   code   clu   cti   使用   efi   online   \n   lex   

原文地址:https://www.cnblogs.com/evenbao/p/9283353.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!