首页 > 其他分享 >欧拉函数证明与代码实现

欧拉函数证明与代码实现

时间:2023-06-28 22:55:27浏览次数:48  
标签:frac 函数 int res 代码 varphi 互质 欧拉

欧拉函数

  • 定义
    对于正整数n小于等于n的数中与n互质的数的个数记为\(\varphi(n)\),即为欧拉函数
  • 欧拉公式
    由算数基本定理任意一个正整数都可以写作n=\(p_1^{a_1}p_2^{a_2}\cdots p_k^{a^k}\)
    那么\(\varphi(n)=n\prod\limits_{i=1}^{k}({1-\frac{1}{p_i}})\)
  • 数学证明
    首先\(\varphi(n)\)是一个积性函数
    即 \(\varphi(a_1*a_2)=\varphi(a_1)*\varphi(a_2)\)这个的证明这里不作叙述可看这个链接积性证明
    然后从1到一个数\(p_n^{a_n}\)一共有\(p_n^{a_n}\)个数其中与其不互质的有\(p_n,2p_n,3p_n\dots p_n^{a_n}(p_n^{a_{n-1}}*p_n)\)一共有\(p_n^{a_{n-1}}\)个数,所以与其互质的一共有\(p_n^{a_n}(1-\frac{1}{p_n})个\)
    所以有:

\[ \varphi(n)=\varphi(p_1^{a_1})*\varphi(p_2^{a_2})\dots\varphi(p_k^{a_k})\\ =p_1^{a_1}(1-\frac{1}{p_1})*p_2^{a_2}(1-\frac{1}{p_2})\dots*p_k^{a_k}\\=n*\prod\limits_{i=1}^{k}(1-\frac{1}{p_i}) \]

  • 代码实现
#include<iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        int a;
        scanf("%d",&a);
        int res=a;
        for(int i=2;i<=a/i;i++)
        {
            if(a%i==0)
            {
                res=res/i*(i-1);//注意先除再乘防止爆int
            }
            while(a%i==0)
            {
                a/=i;
            }
        }
        if(a>1)
        {
            res=res/a*(a-1);
        }
        printf("%d\n",res);
    }
    
    
    return 0;
}
  • 代码细节
    注意res=res/i*(i-1)这里要先除再乘防止爆int 可能会有疑问我们推导的公式中\(1-\frac{1}{p_i}\)是一个小数但是c++里/是向下取整的,那么这里会不会有问题呢?其实是完全没问题的 我们可以看到只有当a%i==0时我们才会进行res的操作并且每次循环中a至少都和res除i除的一样多也就是说只要a中有约数 i 那么res中也一定有 i 一定不会出现小数。

Written with StackEdit中文版.

标签:frac,函数,int,res,代码,varphi,互质,欧拉
From: https://www.cnblogs.com/Taco-gu/p/17512777.html

相关文章

  • R语言用WinBUGS 软件对学术能力测验建立层次(分层)贝叶斯模型|附代码数据
    全文下载链接:http://tecdat.cn/?p=11974最近我们被客户要求撰写关于WinBUGS的研究报告,包括一些图形和统计输出。R2WinBUGS软件包提供了从R调用WinBUGS的便捷功能。它自动以WinBUGS可读的格式写入数据和脚本,以进行批处理(自1.4版开始)。WinBUGS流程完成后,可以通过程序包本身将结果......
  • syscall函数
    syscall函数系统调用号函数名入口点源码0readsys_readfs/read_write.c1writesys_writefs/read_write.c2opensys_openfs/open.c3closesys_closefs/open.c4statsys_newstatfs/stat.c5fstatsys_newfstatfs/stat.c6lstatsys_newlst......
  • 欧拉函数
    欧拉函数定义对于正整数n小于等于n的数中与n互质的数的个数记为$\varphi(n)$,即为欧拉函数欧拉公式由算数基本定理任意一个正整数都可以写作n=$p_1{a_1}p_2{a_2}\cdotsp_k{ak}$那么$\varphi(n)=n\prod\limits_{i=1}^{k}({1-\frac{1}{p_i}})$数学证明首先$\varphi(n)$是一......
  • is620n,is620p,is620,伺服驱动器的代码和原理等
    is620n,is620p,is620,伺服驱动器的代码和原理等原创文章,转载请说明出处,资料来源:http://imgcs.cn/5c/662030618032.html......
  • Qt编写的CAN通信调试工具源代码支持吉阳光电CAN盒和致远周立功USB转CAN卡
    Qt编写的CAN通信调试工具源代码支持吉阳光电CAN盒和致远周立功USB转CAN卡,带多线程接收可完成标准和扩展CAN帧YID发送和接收,带配置参数自动保存,定时发送,帧类型选择,文本和十六进制等。带有折叠相同的帧YID的功能,如果有相同的帧YID,则会自动折叠显示。可组装发送字节,short,int,float......
  • vscode 自动修改C代码格式
    1.插件clang-format安装 clang-format默认安装路径为c:\Users\wqr57\.vscode\extensions\ms-vscode.cpptools-0.18.1/bin/../LLVM/bin/clang-format.exe 2.C格式客制化配置---Language:Cpp#BasedOnStyle: LLVMAccessModifierOffset:-4AlignAfterOpenBracket:A......
  • 案例-用户登录-代码实现
       代码实现packagecom.itheima.mapper;importcom.itheima.pojo.User;importorg.apache.ibatis.annotations.Param;importorg.apache.ibatis.annotations.Select;publicinterfaceUserMapper{@Select("select*fromtb_userwhereusername=#{use......
  • .NET Core 允许跨域的两种方式实现(IIS 配置、C# 代码实现)
    〇、前言当把开发好的WebApi接口,部署到Windows服务器IIS后,postman可以直接访问到接口并正确返回,这并不意味着任务完成,毕竟接口嘛是要有交互的,最常见的问题莫过于跨域了。若前端文件是在当前接口文件下的wwwroot文件夹下,那么接口的访问就没问题,因为是同协议(http、https)......
  • 函数
       ......
  • bc-liunx欧拉编译安装nginx
    1、下载nginx包上次至目标服务器2、解压包3、安装依赖包yuminstall-ypcrepcre-develpcrepcre-developensslopenssl-develzlibzlib-develgdgd-devel4、编译安装nginx,这里记住nginx不要放在和编译路径一个文件夹,不然会报错,一下是编译命令与建议参数./configure--prefix......