zoukankan      html  css  js  c++  java
  • 欧拉函数

    定义baidu

    bzoj2190

    首先我们可以发现横坐标和纵坐标必须互质,否则会有个和他相似的小三角形挡住他

    然后就不知所措了,脑补了奇怪的做法,然后发现只要欧拉函数乘一乘就可以了

    p[i]:i的欧拉函数 ans=2*p[1-(n-1)]的和+1

    但是我不知道怎么快速地求出欧拉函数。。。

    结果发现竟然有一些奇怪的性质,代码里有。。。

    #include<cstdio>
    #include<cstring>
    #define N 40010
    using namespace std;
    int n,tot;
    int p[N],prime[N],mark[N];
    int main()
    {
        scanf("%d",&n);
        if(n==1)
        {
            printf("0");
            return 0;
        }
        if(n==2)
        {
            printf("3");
            return 0;
        }
        p[1]=1;
        for(int i=2;i<n;i++)
        {
            if(!mark[i]) 
            {
                prime[++tot]=i;
                p[i]=i-1;
            }
            for(int j=1;j<=tot&&prime[j]*i<=n;j++)
            {
                mark[prime[j]*i]=1;
                if(i%prime[j]==0) p[i*prime[j]]=p[i]*prime[j];
                else p[i*prime[j]]=p[i]*(prime[j]-1);
            }
        }
        int ans=0;
        for(int i=1;i<n;i++)
        {
            ans+=p[i];
        }
        printf("%d",2*ans+1);
        return 0;
    }
  • 相关阅读:
    NOIP2018游记-DAY1
    NOIP2018游记-DAY0
    18.11.7绍一模拟赛
    [SPOJ]SELTEAM
    18.11.5绍一模拟赛
    18.11.2绍一模拟赛
    [模拟赛]世界杯
    [模拟赛]路途
    乘法逆元的研究
    子查询,TOP_N,分页,行转列
  • 原文地址:https://www.cnblogs.com/19992147orz/p/6181111.html
Copyright © 2011-2022 走看看