zoukankan      html  css  js  c++  java
  • 【欧拉函数模板题】最大公约数

    题目描述

    对于一个给定的正整数n,研究它和其它数的最大公约数的值,可以得出许多有趣的性质。 其中一个广为人知的性质就是欧拉函数φ(n),它表示正整数1~n中与n的最大公约数的值是1的数的个数。
    当然,正整数n与正整数1~n的最大公约数并不只会是1, 还可以是其它的数。本题中,你的任务就是找出所有可能的最大公约数的值,并统计正整数1~n中与n的最大公约数是这个值的数有多少个。

    输入

    输入包括一行一个正整数n。

    输出

    输出若干行,每行两个正整数m, x,表示正整数1~n中,有x个数和n的最大公约数为m。
    对于每行的mi, xi,你需要保证xi>0,且mi按升序顺序输出。
    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    ll n;
    struct node
    {
        ll x;
        ll p;
        bool operator<(const node&c)const
        {
            return x>c.x;
        }
    } now;
    priority_queue<node>pi;
    ll phi(ll x)
    {
        ll ret=x;
        for (ll i=2;i*i<=x;++i)
        {
            if (x%i==0)
            {
                ret-=ret/i;
                while(x%i==0)
                    x/=i;
            }
        }
        if(x>1)
        {
            ret-=ret/x;
        }
        return ret;
    }
     
    int main()
    {
        scanf("%lld",&n);
        for(ll i=1;i*i<=n;++i)
        {
            if(n%i==0)
            {
                now.x=n/i;
                now.p=phi(i);
                pi.push(now);
                if(i*i!=n)
                {
                    now.x=i;
                    now.p=phi(n/i);
                    pi.push(now);
                }
            }
        }
        while(!pi.empty())
        {
            now=pi.top();
            printf("%lld %lld
    ",now.x,now.p);
            pi.pop();
        }
        return 0;
    }
  • 相关阅读:
    网页中的默认按钮
    心动不如行动
    周日骑行广州大学城
    买单车别买重车
    今晚好无聊
    在自行车论坛看到的有趣帖子
    php zend framework 生成 pdf 出现中文乱码
    FPDI Import existing PDF documents into FPDF
    PHP 哈希表,关联数组,遍历方法大全
    zend framework 如何多表查询
  • 原文地址:https://www.cnblogs.com/Diliiiii/p/10284672.html
Copyright © 2011-2022 走看看