zoukankan      html  css  js  c++  java
  • 【poj2478】 Farey Sequence

    http://poj.org/problem?id=2478 (题目链接)

    题意

      求分母小于等于n的真分数的个数。

    Solution

      现在只能做做水题了,唉,思维僵化。

    细节

      前缀和开LL

    代码

    // poj2478
    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<cstdio>
    #include<cmath>
    #define LL long long
    #define inf 2147483640
    #define MOD 10000
    #define Pi acos(-1.0)
    #define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
    using namespace std;
     
    const int maxn=1000010;
    int phi[maxn],vis[maxn],p[maxn],n;
    LL s[maxn];
    
    void calphi() {
    	phi[1]=1;
    	for (int i=2;i<=maxn;i++) {
    		if (!vis[i]) {p[++p[0]]=i;phi[i]=i-1;}
    		for (int j=1;j<=p[0];j++) {
    			if (p[j]*i>maxn) break;
    			vis[p[j]*i]=1;
    			if (i%p[j]==0) {phi[i*p[j]]=phi[i]*p[j];break;}
    			else phi[i*p[j]]=phi[i]*phi[p[j]];
    		}
    	}
    	for (int i=2;i<=maxn;i++) s[i]=s[i-1]+phi[i];
    }
    int main() {
    	calphi();
    	while (scanf("%d",&n)!=EOF && n) printf("%lld
    ",s[n]);
        return 0;
    }
    

      

  • 相关阅读:
    C#
    C#
    C#
    C#
    C#
    C#
    系统工具
    远程登录
    文件传输服务
    软件安装
  • 原文地址:https://www.cnblogs.com/MashiroSky/p/6168903.html
Copyright © 2011-2022 走看看