当前位置: 首页 > article >正文

欧拉函数——acwing

题目一:欧拉函数

873. 欧拉函数 - AcWing题库

分析(欧拉函数相关知识点)

互质数不了解可以参考之前笔记,以便更好了解:

数论—快速幂,欧几里得及其扩展,逆元,单位元_数论单位元函数-CSDN博客

👆👆👆

代码

核心公式,只需要对n实现质因子分解即可:

质数——acwing-CSDN博客

👆👆👆质数的笔记

#include<bits/stdc++.h>
using namespace std;

int main() {
    int _;
    cin >> _;
    while(_ --) {
        int x; cin >> x;
        int ans = x; // 个数
        int i;
        for(i = 2; i <= x/i; i ++) {
            if(x%i == 0) {// 质因子判断
                // 先出后乘防止爆数据
                ans = ans/i*(i-1);
                // 先把i用了,然后约尽质因子i就可
                while(x%i==0) x/=i;
            }
        }
        
        if(x>1) ans = ans/x*(x-1);
        
        cout << ans << endl;
    }
    
    return 0;
}

题目二:筛法求欧拉函数 

874. 筛法求欧拉函数 - AcWing题库

分析

首先考虑暴力,但是每次都要求质因数分解。

算法优化:使用欧拉筛,来求欧拉函数,属于一种递推

代码

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;

//欧拉筛
const int N = 1e6+10;
int prime[N], cnt;
bool vis[N];
//欧拉函数
int ol[N];

int main() {
    int n;
    cin >> n;
    
    memset(vis,true,sizeof vis);
    ol[1] = 1;
    ll res = 0;
    
    for(int i = 2; i <= n; i ++) {
        if(vis[i]) {
            prime[cnt++] = i;
            
            ol[i] = i-1;
        }
        for(int j = 0; j < cnt && i*prime[j]<=n; j ++) {
            vis[i*prime[j]] = false;
            if(i%prime[j]==0) {
                
                ol[i*prime[j]] = ol[i]*prime[j];
                
                break;
            }
            ol[i*prime[j]] = ol[i]*(prime[j]-1);
        }
    }
    
    for(int i = 1; i <= n; i ++) {
        res += ol[i];
    }
    
    cout << res << endl;
    
    return 0;
}


http://www.kler.cn/a/418883.html

相关文章:

  • OpenGauss数据库介绍
  • 【IMF靶场渗透】
  • 理解Java集合的基本用法—Collection:List、Set 和 Queue,Map
  • pgsql指令
  • C++11 http服务端和客户端库cpp-httplib
  • 使用 PDF API 合并 PDF 文件
  • 挑战用React封装100个组件【005】
  • 【linux】(23)对象存储服务-MinIo
  • Linux 僵尸进程和孤儿进程, 进程优先级
  • Android 12.0新增自定义HIDL问题记录
  • 内网穿透步骤
  • Spring Data JPA(二) 高级进阶
  • linux——进程间通信及管道的应用场景
  • 蓝桥杯经验分享
  • 医院分诊管理系统|Java|SSM|VUE| 前后端分离
  • 2. STM32_中断
  • 深入理解 PyTorch .pth 文件和 Python pickle 模块:功能、应用及实际示例
  • 前端学习week8——vue.js
  • 支持向量机算法:原理、实现与应用
  • LeetCode题解:34.在排序数组中查找元素的第一个和最后一个位置【Python题解超详细,二分查找法、index法】,知识拓展:index方法详解
  • [MySQL]流程控制语句
  • SpringCloud书单推荐
  • 深度学习常见数据集处理方法
  • 爬虫专栏第一篇:深入探索爬虫世界:基础原理、类型特点与规范要点全解析
  • npm : 无法加载文件 D:\nodejs\npm.ps1,因为在此系统上禁止运行脚本
  • 云技术基础(泷羽sec)