zoukankan      html  css  js  c++  java
  • BZOJ2190: [SDOI2008]仪仗队

    Description

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

    Input

      共一个数N。

    Output

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

    Sample Input

      4

    Sample Output

      9


    HINT

    【数据规模和约定】   对于 100% 的数据,1 ≤ N ≤ 40000

    不难发现除去第一列和最后一行,一个人(x,y)能被看到的条件是gcd(x-1,y-1)=1。

    那么反演一下就行了。

    #include<cstdio>
    #include<cctype>
    #include<queue>
    #include<cstring>
    #include<algorithm>
    #define rep(i,s,t) for(int i=s;i<=t;i++)
    #define dwn(i,s,t) for(int i=s;i>=t;i--)
    #define ren for(int i=first[x];i;i=next[i])
    using namespace std;
    inline int read() {
        int x=0,f=1;char c=getchar();
        for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
        for(;isdigit(c);c=getchar()) x=x*10+c-'0';
        return x*f;
    }
    const int maxn=40010;
    int pri[maxn],mu[maxn],vis[maxn],cnt;
    void gen(int n) {
    	vis[1]=mu[1]=1;
    	rep(i,2,n) {
    		if(!vis[i]) pri[++cnt]=i,mu[i]=-1;
    		rep(j,1,cnt) {
    			if(pri[j]*i>n) break;
    			vis[i*pri[j]]=1;
    			if(i%pri[j]==0) break;
    			mu[i*pri[j]]=-mu[i];
    		}
    	}
    }
    int main() {
    	int n=read()-1,ans=0;
    	if(n) ans+=2;gen(n);
    	rep(d,1,n) ans+=mu[d]*(n/d)*(n/d);
    	printf("%d
    ",ans);
    	return 0;
    }
    

      

  • 相关阅读:
    QQ 表情大全
    Linux/Unix同Windows文件传输
    CentOS 5.2安装Oracle 10g
    用户名、密码测试用例
    界面测试用例
    PLSQL导入导出数据库
    JavaScript代码格式规范和注意事项
    Node.js 之发送文件数据编码问题
    Node.js 之IP地址和端口号
    Node.js 之ContentType内容类型
  • 原文地址:https://www.cnblogs.com/wzj-is-a-juruo/p/5352720.html
Copyright © 2011-2022 走看看