zoukankan      html  css  js  c++  java
  • 例10-7 uva10820(欧拉)

    题意:输入n,要求满足1≤x,y≤n,且x,y互素的个数。

    若输入2,则答案3为(1,1),(1,2),(2,1);所以欧拉函数求出所有数的phi值,除了1之外都加上phi值的2倍即可

    通过推导:

    phi[n] = n*(1-1/p1)*......*(1-1/pn)            /*pi表示n的素因子,求出小于n与且与其互素的数


    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #include <map>
    #include <vector>
    using namespace std;
    typedef long long ll;
    const int N = 50000;
    int phi[N + 5];
    
    void phi_tab()
    {
        for(int i = 2; i <= N; i++)
            phi[i] = 0;
        phi[1] = 1;
        for(int i = 2; i <= N; i++)
        {
            if(!phi[i])
                for(int j = i; j <= N; j+=i)
                {
                    if(!phi[j])
                        phi[j] = j;
                    phi[j] = phi[j]/i*(i-1);
                }
        }
    }
    
    
    int main()
    {
        int n;
        phi_tab();
        while(scanf("%d",&n)!=EOF && n)
        {
            int ans = 1;
            for(int i = 2;i <= n;i++)
                ans+=2*phi[i];
            printf("%d
    ",ans);
        }
        return 0;
    }
    

      

  • 相关阅读:
    Android BitmapFactory.Options
    Android TabHost
    Android 黑色样式menu
    Android Tab与TabHost
    Android Theme
    Activity 四种launchMode
    IOS xcode安装
    BaseActivity合集
    自定义BaseActivity
    Fragment 底部菜单栏
  • 原文地址:https://www.cnblogs.com/Przz/p/5409723.html
Copyright © 2011-2022 走看看