欧拉函数和费马小定理(基础题题解)

本文通过探讨POJ和HDU的数论问题,详细讲解了欧拉函数在解决实际问题中的应用,如POJ 2407、1284、2478和3090等题目。同时,结合费马小定理分析了Hdu1098的解题思路,强调了分类讨论和数学原理在解题过程中的重要性。此外,还介绍了如何利用费马小定理解决Hdu2824和Poj3501中的数论问题,揭示了欧拉函数和互素性质的关系。
摘要由CSDN通过智能技术生成

太久没有在blog上记录学习进度啦,需要认真反思一下,陈老师的话如同醍醐灌顶,复习知识唤醒记忆,拥有一个属于自己的blog是一件引以为豪的事情,希望自己做的越来越好吧!加油!


poj 2407 Relatives

#include <iostream>
#include <cstdio>

using namespace std;

long long phi(long long n)
{
    long long res=n;
    for(long long  i=2;i*i<=n;i++)
    {///任何一个合数都至少有一个不超过根号n的素因子,复杂度为根号n
        if(n%i==0)///用公式
        {
            res=res-res/i;
            while(n%i==0)
            {
                n=n/i;
            }
        }
    }
    if(n>1)///处理最后一个数
    {
        res=res-res/n;
    }
    return res;
}///再此代码的基础上还可以用素数打表将其优化,请大家积极尝试

int main()
{
    long long  n;
    while(scanf("%lld",&n)!=EOF)
    {
        if(n==0)
            break;
        else
        {
            /*if(n==1)
            cout<<"0"<<endl;
            else*/
            printf("%lld\n",phi(n));
        }
    }
    return 0;
}

Poj1284

公式:ans=phi(n-1);

代码实现:

#include <iostream>
#include <cstdio>

using namespace std;

int phi(int n)
{
    int res=n;
    for(int i=2;i*i<=n;i++)
    {
        if(n%i==0)
        {
            res=res-res/i;
            while(n%i==0)
            {
                n/=i;
            }
        }
    }
    if(n>1)
    {
        res=res-res/n;
    }
    return res;
}

int main()
{
    int p;
    while(scanf("%d",&p)!=EOF)
    {
        cout&l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值