Bi-shoe and Phi-shoe(欧拉函数模板题)

本文展示了一种使用C++实现的数论算法,通过构建一个预处理表来加速求解欧拉函数值的问题。该算法首先初始化一个大小为1e6+50的数组,然后遍历每个可能的数,利用欧拉函数的性质进行优化,从而快速计算出小于等于该数的所有数的欧拉函数值。最后,通过一系列输入的幸运数,找出所有大于等于该幸运数且欧拉函数值也大于等于该幸运数的最小整数,并累加这些整数的值。
摘要由CSDN通过智能技术生成

https://www.csdn.net/link/?target_url=https%3A%2F%2Fvjudge.net%2Fproblem%2FLightOJ-1370&id=71192453&token=b8b8a5128d97274aa569f02eb01ee1e0

#include <iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
const int maxn = 1e6+50;
int phi[maxn];

void phi_table()//打标
{
    memset(phi, 0, sizeof(phi));
    phi[1] = 0;//按照题意 

    for(int i = 2;i < maxn;i++)
    {
        if(!phi[i])
        {
            for(int j = i;j < maxn;j+=i)
            {
                if(!phi[j])phi[j] = j;
                phi[j] = phi[j]/i*(i-1);
            }
        }
    }


}
int lucky[maxn];
int main()
{
    ios::sync_with_stdio(false);
    int T;
    int cnt = 0;
    phi_table();
    cin>>T;
    while(T--)
    {
        cnt++;
        int n;
        ll ans = 0;
        cin>>n;
        for(int i = 0;i < n;i++)
        {
            cin>>lucky[i];

            for(int j = lucky[i]+1;j < maxn;j++)
            {
                if(phi[j] >= lucky[i])
                {

                    ans+=j;break;
                }
            }

        }
        cout<<"Case "<<cnt<<": "<<ans<<" Xukha"<<endl;



    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值