luogu P2158 [SDOI2008]仪仗队

题目描述

作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。 现在,C君希望你告诉他队伍整齐时能看到的学生人数。

输入输出格式

输入格式:

共一个数N

输出格式:

共一个数,即C君应看到的学生人数。

输入输出样例

输入样例#1:

4

输出样例#1:

9

说明

【数据规模和约定】

对于 100% 的数据,1 ≤ N ≤ 40000

不难发现

以C君为(0,0)点构成坐标系

只有该店的横坐标与纵坐标互质时才能被看到

那么就变成就欧拉函数问题

单个求欧拉版

#include<cstdio>
using namespace std;
const int maxn = 1110101;
int oula[maxn];
int prime[maxn];
bool a[maxn];
int n;
int phi(int x)
{
    int ret=1;
    for(int i=2;i*i<=x;i++)
    {
        if(x%i==0)
        {
            ret*=i-1,x/=i;
            while(x%i==0)
            {
                ret*=i;x/=i;
            }
        }
    }
    if(x>1)ret*=x-1;
    return ret;
}

int main ()
{
    scanf("%d",&n);
    int ans=0;
    for(int i=1;i<n;i++)
    {
        ans+=phi(i);
    }
    ans=ans*2,ans+=1;
    printf("%d\n",ans);
    return 0;
}

一起求版

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n;
const int maxn =400004;
int phi[maxn];
void get_phi() {
    phi[1]=1;
    for(int i=2; i<=n; i++) {
        if(!phi[i])
            for(int j=i; j<=n; j+=i) {
                if(!phi[j])phi[j]=j;
                phi[j]=phi[j]/i*(i-1);
            }
    }
}
int main() {
    scanf("%d",&n);
    get_phi();
    int ans=0;
    for(int i=1; i<=n-1; i++)ans+=phi[i];
    printf("%d",2*ans+1);
    return 0;
}

时间: 2024-08-02 03:14:13

luogu P2158 [SDOI2008]仪仗队的相关文章

P2158 [SDOI2008]仪仗队 线性筛(欧拉函数和素数表)

上三角行恰好是[1,n-1]的欧拉函数 http://www.luogu.org/problem/show?pid=2158#sub 1 //#pragma comment(linker, "/STACK:167772160") 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <iostream> 6 #include <queue&g

P2158 [SDOI2008]仪仗队

题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图). 现在,C君希望你告诉他队伍整齐时能看到的学生人数. 输入输出格式 输入格式: 共一个数N 输出格式: 共一个数,即C君应看到的学生人数. 输入输出样例 输入样例#1: 4 输出样例#1: 9 说明 [数据规模和约定] 对于 100% 的数据,1 ≤ N ≤ 40000 设C君为原点,可以发现所

洛谷P2158 [SDOI2008]仪仗队

题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图). 现在,C君希望你告诉他队伍整齐时能看到的学生人数. 输入输出格式 输入格式: 共一个数N 输出格式: 共一个数,即C君应看到的学生人数. 输入输出样例 输入样例#1: 4 输出样例#1: 9 说明 [数据规模和约定] 对于 100% 的数据,1 ≤ N ≤ 40000 看了题解,互质点对,瞬间

P2158 [SDOI2008] 仪仗队(欧拉函数模板)

题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图). 现在,C君希望你告诉他队伍整齐时能看到的学生人数. 分析就不写了都写得很<<<<全>>>>了就当看模板叭 #include<iostream> #include<cstdio> using namespace std; typede

bzoj2190 [SDOI2008]仪仗队

2190: [SDOI2008]仪仗队 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 3353  Solved: 2168[Submit][Status][Discuss] Description 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图).    现在,C君希望你告诉他队伍整齐时能看到的学生人数.

bzoj 2190: [SDOI2008]仪仗队.

2190: [SDOI2008]仪仗队 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 3240  Solved: 2092[Submit][Status][Discuss] Description 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图).现在,C君希望你告诉他队伍整齐时能看到的学生人数. Inp

SDOI2008仪仗队

这题应该注意到与b2818的不同 一个点能被看见当且仅当它与(1,1)的横纵坐标的距离gcd为1 所以问题转化为x,y<=n-1,求gcd(x,y)=1的方案数 最后要加上2 代码: 1 var i,n,tot:longint; 2 ans:int64; 3 phi:array[0..50000] of int64; 4 p:array[0..50000] of longint; 5 procedure get; 6 var i,j:longint; 7 begin 8 fillchar(phi

bzoj2190 [SDOI2008]仪仗队(欧拉函数)

2190: [SDOI2008]仪仗队 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 3203  Solved: 2062[Submit][Status][Discuss] Description 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图).    现在,C君希望你告诉他队伍整齐时能看到的学生人数.

欧拉函数 BZOJ2190 [SDOI2008] 仪仗队

2190: [SDOI2008]仪仗队 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 3165  Solved: 2036[Submit][Status][Discuss] Description 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图). 现在,C君希望你告诉他队伍整齐时能看到的学生人数. In