zoukankan      html  css  js  c++  java
  • Evanyou Blog 彩带

      洛谷传送门

     Farey Sequence

    (格式太难调,题面就不放了)


      分析:

      实际上求分数个数就是个幌子,观察可以得到,所求的就是$sum^n_{i=2}phi (i)$,所以直接欧拉筛+前缀和即可。

      Code:

    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<cmath>
    #include<iostream>
    #include<iomanip>
    #include<algorithm>
    using namespace std;
    const int N=1e6+7;
    int n,phi[N],q[N];
    long long sum[N];
    bool vis[N];
    void ready()
    {
        int top=0,k;phi[1]=1;
        for(int i=2;i<N;i++){
            if(!vis[i])phi[q[++top]=i]=i-1;
            for(int j=1;j<=top&&(k=i*q[j])<N;j++){
                vis[k]=true;
                if(i%q[j])
                    phi[k]=phi[i]*(q[j]-1);
                else {
                    phi[k]=phi[i]*q[j];break;
                }
            }
        }
        sum[2]=phi[2];
        for(int i=3;i<N;i++)
        sum[i]=sum[i-1]+phi[i];
    }
    int main()
    {
        ready();
        while(555){
            scanf("%d",&n);if(n==0)break;
            printf("%lld
    ",sum[n]);}
        return 0;
    }
  • 相关阅读:
    DFS染色解决区域分块问题UVALive 6663
    栈之逆波兰
    线段树总结
    区间合并问题
    线段树的开闭区间问题
    离散化
    线段树的学习过程
    BFS的小结
    状态数组哪家强
    卡特兰数。
  • 原文地址:https://www.cnblogs.com/cytus/p/9238164.html
Copyright © 2011-2022 走看看