zoukankan      html  css  js  c++  java
  • 欧拉表

    题目:UVa10820

    题意:

    给出n求,n以内的有序数对(x, y)互素的对数。

    分析:

    设(x>y)即sum[ n ]表示符合的对数,即答案就数2*sum[n]+1,1是符合条件的(1,1)这对数。

    即打个欧拉表就可以解决。

    代码:

    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    #include<string.h>
    using namespace std;
    const int max_=5e4+5;
    long long sum[max_],phi[max_];
    void phi_table()
    {
        memset(phi,0,sizeof(phi));
        phi[1]=1;
        sum[1]=0;
        for(int i=2;i<max_;i++)
        {
            if(!phi[i])
            {
                for(int j=i;j<max_;j+=i)
                {
                    if(!phi[j])
                        phi[j]=j;
                    phi[j]=phi[j]/i*(i-1);
                }
            }
        }
        for(int i=2;i<max_;i++)
        {
            sum[i]+=sum[i-1]+phi[i];
        }
    }
    int main()
    {
        int n;
        phi_table();
        while(~scanf("%d",&n))
        {
            if(n==0)
                break;
            printf("%lld
    ",2*sum[n]+1);
        }
    }
    View Code
  • 相关阅读:
    List sort()方法
    解析器
    beautifulsoup库
    break 语句
    enumerate函数
    POJ 1915 Knight Moves
    POJ 1745 Divisibility
    POJ 1731 Orders
    POJ 1664 放苹果
    POJ 1606 Jugs
  • 原文地址:https://www.cnblogs.com/linhaitai/p/10012116.html
Copyright © 2011-2022 走看看