欧拉 函数

news2024/9/21 2:40:07

 互质:

互质是公约数只有1的两个整数,叫做互质整数。公约数只有1的两个自然数,叫做互质自然数,后者是前者特殊情况。

1和-1与所有整数互质,而且它们是唯一与0互质的整数

互质的判断方法:

(1)两个数互质的情况

1)两个不同的质数是互质的。

2)较大数是质数的两个数是互质数

3)相邻的两个自然数是互质数

4)相邻的两个奇数是互质数

5)最大公约数是1,两个数互质

(2)三个或三个以上自然数互质有两种不同的情况

一种是这些成互质数的自然数是两两互质的。如2,3,5

一种不是两两互质的,如6,8,9

 欧拉函数:

一般记作\phi(N),是指1-N中与N互质的数的个数

N看成质因数的乘积形式:N={p_1}^{\alpha_1}{p_2}^{\alpha_2}...{p_k}^{\alpha_k}

其中:p_n代表各个质因子;\alpha_n代表各个质因子的质指数。 

那么\phi(N) = N(1-\frac{1}{p_1})(1-\frac{1}{p_2})(1-\frac{1}{p_3})...(1-\frac{1}{p_k})

step1:

采用分解质因数的方法,分别求出N质因数乘积式中的每一个质因数p_n

分解质因数http://t.csdnimg.cn/Tmf0G

step2:

每第一次遇到一个质因数,就套用公式 res = res/i*(i-1)

(注意:因为公式中不涉及到任何一个质因数的指数,所以 res = res/i*(i-1) 不应该放在while(x%i==0) 之中)

step3:

输出结果

题目如下:

给定 n 个正整数 ai,请你求出每个数的欧拉函数。

输入格式

第一行包含整数 n。

接下来 n 行,每行包含一个正整数 ai。

输出格式

输出共 n 行,每行输出一个正整数 ai 的欧拉函数。

数据范围

1≤n≤100
1≤ai≤2×109

代码如下:

#include<iostream>
#include<cstring>

using namespace std;

int n;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    
    cin >> n;
    while(n--)
    {
        int x;
        cin >> x;
        
        int res = x;//注意res的初始值是x,因为在公式的一开始是N本身
        
        for (int i =2 ;i<=x/i;++i)
        {
            if (x % i == 0)
            {
                res = res/i * (i-1);//这里注意要先进行除法,再进行乘法
                                    //不然会爆掉int
                                    //爆掉int后,取值就是超过int最大值的部分,如超过int最大值1
                                    //那么爆掉int后的取值就是1
                while(x % i ==0)
                x = x/i;
            }
        }
        if (x > 1)
        res = res/x * (x-1);
        
        cout << res << endl;
    }
    return 0;
}

(1)公式推导

(2)要先写除法,再写乘法 res = res/i * (i-1) 

 res = res/i*(i-1) res = res*(1-1/i) 是一样的,不过是前者先进行了除法,后者先进行了乘法

(3)res = res/i*(i-1)不应放在while(x%i == 0)之中 

因为欧拉公式中不涉及到任何质因数的指数。

如果将 res = res/i*(i-1) 放到 while(x%i==0) 之中,面对一个质因数p_1的指数是2,那么res最后的答案中就会乘了两次(1-\frac{1}{p_1})

放进 while(x%i==0) 中,质因数的指数就会对结果产生影响

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2092660.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信公众号文章导出工具 100%还原原文样式:wechat-article-exporter

wechat-article-exporter是一款微信公众号文章导出工具&#xff0c;能够100%还原原文样式&#xff0c;工具受 WeChat_Article 项目的启发所写&#xff0c;目前支持 搜索公众号和公众号内文章&#xff0c;导出文章为包含图片和样式文件的HTML格式&#xff08; (打包了图片和样式…

中仕公考:这样备考,你天生就是公务员!

根据上岸学员的反馈&#xff0c;小编发现了一些共通点&#xff0c;无论是在职备考还是全职备考&#xff0c;只要做到以下几点&#xff0c;不上岸那是不可能的! 1. 作息规律&#xff0c;早起不熬大夜。每天按时早起&#xff0c;挤出时间用来学习&#xff0c;晚上不熬夜学习到很…

Windows编程系列:PE文件结构

Windows编程系列&#xff1a;PE文件结构 PE文件结构 Portable Executable (PE)&#xff0c;可移植的可执行文件。在Windows平台下&#xff0c;所有的可执行文件&#xff08;包括.exe, .dll, .sys, .ocx, .com等&#xff09;均使用PE文件结构。这些使用了PE文件结构的可执行文…

HarmonyOS开发实战( Beta5版)应用性能工具CPU Profiler的使用规范

简介 本文档介绍应用性能分析工具CPU Profiler的使用方法&#xff0c;该工具为开发者提供性能采样分析手段&#xff0c;可在不插桩情况下获取调用栈上各层函数的执行时间&#xff0c;并展示在时间轴上。 开发者可通过该工具查看TS/JS代码及NAPI代码执行过程中的时序及耗时情况…

Web-gpt

AJAX AJAX&#xff08;Asynchronous JavaScript and XML&#xff0c;异步JavaScript和XML&#xff09;是一种用于创建动态网页应用的技术。它允许网页在不重新加载整个页面的情况下&#xff0c;异步地从服务器请求数据&#xff0c;并将这些数据更新到网页上。这提高了用户体验…

HarmonyOS开发实战( Beta5版)小程序场景性能优化开发指导

简介 小程序是一种轻量级的应用&#xff0c;它不需要下载、安装即可使用&#xff0c;用户可以通过扫描二维码或者搜索直接打开使用。小程序运行在特定的平台上&#xff0c;平台提供了小程序的运行环境&#xff08;运行容器&#xff09;和一些基础服务&#xff08;小程序API&am…

【C++ 第十八章】C++11 新增语法(2)

前情回顾&#xff1a; 【C11 新增语法&#xff08;1&#xff09;&#xff1a;1~6 点】 C11出现与历史、花括号统一初始化、initializer_list初始化列表、 auto、decltype、nullptr、STL的一些新变化 本文会使用到自己模拟实现的 string 和 list 类&#xff0c;为了更好的观察各…

笔记整理—内核!启动!—uboot部分(2)

上文中&#xff0c;我们说到了使用uboot去启动kernel支持的几种方式以及压缩kernel的几种形式&#xff0c;本章节将要接着内核的启动说起。 上一章我们对uImage格式进行了初步的说明&#xff0c;并说这样的格式已经被废弃&#xff0c;但是依然保留了相应的代码。boot_get_kerne…

MATLAB生成mif文件

MATLAB代码 % 参数设置 N 4096; % 数据点数量 t linspace(0, 2*pi, N); % 时间向量 width 12; % 位宽% 正弦波 sine_wave 2.5 * sin(t) 2.5; % 幅度在0到5之间% 三角波 tri_wave 5 - abs(mod(t/(2*pi)*4, 2) - 1);% 方波 square_wave 2.5 * (square(t) 1); % 将范围调…

Hive Tutorial For Beginners

Hive Tutorial For Beginners 一、Hive历史&#xff08;History of Hive&#xff09; Facebook 在面对日益增长的大数据时&#xff0c;选择了 Hadoop 作为解决方案。 但问题在于&#xff0c;许多用户并不熟悉 Java 或其他编程语言&#xff0c;这使得使用 Hadoop 的 MapReduc…

代码随想录——回文子串(Leetcode 647)

题目链接 我的题解&#xff08;双指针&#xff09; 思路&#xff1a; 当然&#xff0c;以下是对您提供的代码的解释&#xff1a; class Solution {public int countSubstrings(String s) {// 初始化回文子字符串的数量int count 0;// 遍历字符串的每个字符&#xff0c;使用…

无人机之电池篇

无人机电池作为无人机的重要组成部分&#xff0c;其性能、使用、保养及选择都至关重要。以下是对无人机电池的综合介绍&#xff1a; 一、无人机电池的基本参数 电池容量&#xff1a;电池容量直接影响无人机的续航能力。大容量电池&#xff0c;如5000mAh的电池&#xff0c;能提…

无人机道通布局的讲究详解!!!

一、通道分配与功能对应 基本通道&#xff1a;无人机遥控器通常至少包含四个基本通道&#xff0c;分别对应无人机的上下&#xff08;升降&#xff09;、左右&#xff08;副翼&#xff09;、前后&#xff08;俯仰&#xff09;和旋转&#xff08;方向舵&#xff09;控制。这些通…

关于报错 SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“ 的可能原因

1. 絮絮叨叨 学习或工作中&#xff0c;如果需要从头建立日志打印体系&#xff0c;笔者通常直接照抄之前的博客&#xff1a;《Java maven工程配置slf4j》&#xff0c;直接粘贴、复制相关依赖除了上述博客提到的slf4j-api、logback-classic&#xff0c;也看到过slf4j-simple、lo…

区域生长算法详解与Python实现

图像分割是计算机视觉中一个重要的任务&#xff0c;区域生长算法是其中的一种常见方法。本文将详细介绍区域生长算法的原理&#xff0c;并通过Python代码实现&#xff0c;带你一步步理解它的实际应用。 1. 区域生长算法简介 区域生长算法是一种基于像素相似性进行图像分割的方…

2025款宋L EV全面升级加量不加价,仅18.98万元起

8月30日&#xff0c;2024成都车展正式开幕&#xff0c;备受期待的比亚迪王朝网B级先锋猎装SUV——2025款宋L EV正式上市&#xff0c;搭载“天神之眼”高阶智能驾驶辅助系统DiPilot 100&#xff0c;e平台3.0、CTB、云辇-C三大明星技术&#xff0c;并新增外观内饰配色。凭借智驾、…

【2024】Datawhale X 李宏毅苹果书 AI夏令营 Task2

本文是关于李宏毅苹果书”线性模型“学习内容的记录。 线性模型 线性模型&#xff08;linear model&#xff09;&#xff1a;将输入的特征 x x x&#xff08;或 x \bold{x} x&#xff09;乘上权重 ω \omega ω&#xff08;或 ω \bold{\omega} ω&#xff09;&#xff0c;再…

Python简易IDE工作界面制作

、 休闲一下&#xff0c;学习编程还是要学习一些界面编程&#xff0c;能够根据需要制作图形操作界面&#xff0c;这样我们开发的程序才能方便操作和使用&#xff0c;同时获得更友好的人机交互体验。下面是一个用PyQt5制作的简易界面&#xff0c;供大学参考。如下图所示&a…

罪人的终幕(原题)

题目背景 而我承诺你&#xff0c;一切都将在一场盛大的&#xff0c;如同戏剧般的审判中结束…… 小小地旋转&#xff0c;轻轻地跳跃&#xff0c;然后便是「罪人」的谢幕。 题目描述 定义函数 &#x1d44e;(&#x1d465;)a(x) 表示自然数 &#x1d465;x 的不同的质因子的和。…

数据增强在Sentence Transformers中的作用:提高句子评分任务的性能

Sentence Transformers 是一个强大的 Python 库&#xff0c;它基于 Transformer 模型架构&#xff0c;如 BERT、RoBERTa 和 XLM-RoBERTa 等&#xff0c;用于学习和操作句子级别的向量表示。这个库特别适合于处理自然语言处理&#xff08;NLP&#xff09;任务&#xff0c;能够为…