• 洛谷P2158 [SDOI2008]仪仗队



    这道题仔细观察就会发现规律,设点的坐标为(X,Y)那么y=kx;

    求不同的k值;k=y/x要k值不同x,y肯定要互质;可以随便观察一个点比如(1,4)

    或者(3,2)这些可以看见的点都是x,y互质;

    那么转化问题;

    怎么才能求到这些点呢;

    因为x<=n;y<=n;

    那么就问题就变成了在小于n里面可以找到互质多少个的数;

    设2<i<=n,引入欧拉函数,欧拉函数可以求小于等于i,有多少个与i互质的数;

    为什么大于2?

    因为横竖行都只能看1个,不然1于任何数都互质;

    给出离线欧拉筛模板代码(大概是吧hhhh)

    LL ans=2,a[maxn];
    void init()
    {
        for(int i=1;i<=maxn;i++)
            a[i]=i;
            a[1]=0;
            for(int i=1;i<=maxn;i++)
            {
                if(a[i]==i)
                {
                 for(int j=i;j<=maxn;j+=i)
                 a[j]=a[j]/i*(i-1);    
                }
            }
    }

    我们求的答案记为ans,ans=2(初值为2是因为加上横竖两行的)

    求答案:ans+=a[i]*2(2<i<=n);(为什么乘以2?)

                                                                                    (比如i=3,那么Φ(3)中2只算一种互质的可能性;但是坐标(x,y)就有两种可能性如(3,2),(2,3)

                                                                                      所以小于i的互质个数要乘以2才是要求答案)

                                                                                     %%%%陈玖言julao

                                                                                    

  • 相关阅读:
    bzoj 2818 Gcd(欧拉函数 | 莫比乌斯反演)
    bzoj 2186 [Sdoi2008]沙拉公主的困惑(欧拉函数,逆元)
    bzoj 2393 Cirno的完美算数教室(容斥原理+搜索)
    c3p0 连接池配置
    Hibernate连接池断开自动重连
    Oracle ASM注意事项
    JAVA如何获得数据库的字段及字段类型
    在引入的css或者js文件后面加参数的作用
    JAVA注解
    Linux软连接和硬链接
  • 原文地址:https://www.cnblogs.com/ltlt/p/9085212.html
Copyright © 2020-2023  润新知