最大公约数:AcWing 872. 最大公约数 欧拉函数:AcWing 873. 欧拉函数

#include
using namespace std;

int gcd(int a,int b)
{
    return b>0?gcd(b,a%b):a;
}

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        int ans=gcd(a,b);
        printf("%d\n",ans);
    }
    return 0;
}

1.是一个需要记忆的算法模板,核心代码只有一行,之前写过一篇博客:最大公约数 

2.最大公约数即为 Greatest Common Divisor,常缩写为 gcd。 

3.有关的知识可以参考gcd 

4.好吧,这一道题目太简单了,没有什么内容可以写...... 

#include
using namespace std;

int main()
{
    int n;
    scanf("%d",&n);
    while(n--)
    {
        int x;
        scanf("%d",&x);
        int ans=x;
        for(int i=2;i<=x/i;i++)
        {
            if(x%i==0)
            {
                while(x%i==0)
                {
                    x/=i;
                }
                ans=ans/i*(i-1);
            }
        }
        if(x>1) ans=ans/x*(x-1);
        printf("%d\n",ans);
    }
    return 0;
}

1.欧拉函数这道题目,欧拉函数是求某一个数字的从1到n(假设该数字记作n)与n互质的数字的数目,互质指的是两个数字的最大公约数等于1,比如说数字3,1和2都是与3互质的数,所以3所对应的欧拉函数的值就是2,再比如说8,1,3,5,7这四个数字都与8互质,所以8所对应的欧拉函数的数值是4

2.欧拉函数的证明应该不重要吧(),直接使用公式即可(感觉)

3.套用欧拉函数的公式,首先对输入的数字进行质因数分解,在质因数分解的同时,使用欧拉函数的公式,有一个代码细节需要注意,我们输入的数字的范围是2e9,如果我们先进行乘法,再进行除法,会发生溢出(并且同时会向下取整精度会损失),在循环外面判断一下我们输入的数字最后是变成了1还是一个质数,如果是一个质数的话,我们再更新一次欧拉函数的数值

4.总的来说还是比较简单的

5.以上就是这个题目的全部内容,没有比当傻瓜更简单的事儿了,为了一件事情疯狂,总有一天可以从中找到答案。

你可能感兴趣的:(算法竞赛,c++,算法,数据结构,数学,欧拉函数,约数)