首页 > 其他分享 >欧拉函数学习笔记

欧拉函数学习笔记

时间:2024-02-29 13:58:35浏览次数:18  
标签:frac 函数 int sum 笔记 ans LL 欧拉 define

首先,\(\varphi(n)\) 的值是 \(n\) 内与 \(n\) 互质的数的个数。


//求n的欧拉函数值: phi[n]
int getPhi(int n){
    int ans = n;
    for(int i = 2; i*i <= n; i++){
        if(n % i == 0){
            ans = ans * (i-1)/i;
            while(n % i == 0) n /= i;
        }
    }
    if(n > 1) ans = ans * (n-1)/n ;
    return ans;
}
时间复杂度:sqrt(n)

你可能会问:你这玩意除了装X还有个【数据删除】用?

欸嘿还真不是,来了题你就知道了

T1

给定整数N和M,有多少整数X满足1<=X<=N且gcd(X,N)>=M?

第一行输入是一个整数T(T<=100),表示测试用例的数量。以下T行各包含两个数字N和M(2<=N<=100000000,1<=M<=N),表示一个测试用例。(注意这是个伏笔)

啊格式很丑大家别介意我从OJ上直接复制的...

首先 \(N\) 最多有 \(\sqrt n\) 个因数(说实话大多数时间达不到这个上限)

设 \(d\) 是 \(N\) 的约数,且 \(d>=M\)。

其实它起的不是约数的作用,而是这个最大公因数!因为不管咋样 \(\gcd(N,X)\mid N\)。

枚举它,问题就成了 \(1\) 到 \(\frac{d}{n}\) 有多少数和 \(\frac{d}{n}\) 互质(\(\frac{d}{n}\) 即 \(X\))。

欸这好像是 \(\varphi(\frac{d}{n})\) 欸!

然后就水了,直接求和。

对了记得伏笔吗?这个 \(\varphi\) 不能线性筛求,得用它自己的计算公式。

#include<stdio.h>
#include<bits/stdc++.h>
#define N 1000010
#define MOD 998244353
#define esp 1e-8
#define INF 999999999999999999
#define LL long long
#define rep(i,a,b,g) for(LL i=a;i<=b;i+=g)
#define rem(i,a,b,g) for(LL i=a;i>=b;i-=g)
#define repn(i,a,b,g) for(LL i=a;i<b;i+=g)
#define remn(i,a,b,g) for(LL i=a;i>b;i-=g)
#define pll pair<LL,LL>
#define mkp(x,y) make_pair(x,y)
#define lowbit(x) ((x)&(-(x)))
#define lc (u<<1)
#define rc (u<<1|1)
using namespace std;
LL phi(LL n)
{
	LL sum=n;
	for(LL i=2;i*i<=n;i++)
	{
		if(n%i==0)
		{
			sum=sum*(i-1)/i;
			while(n%i==0)n/=i;
		}
	}
	if(n>1)sum=sum*(n-1)/n;
	return sum;
}
LL t,n,m,p[100010],o;
int main()
{
	cin>>t;
	while(t--)
	{
		cin>>n>>m; 
		LL sum=0;
		o=0;
		for(LL i=1;i*i<n;i++)
		{
			if(n%i==0)
			{
				p[++o]=i;
				p[++o]=n/i;
			}
		}
		LL s=sqrt(n);
		if(s*s==n)p[++o]=s;
		rep(i,1,o,1)
		{
			if(p[i]>=m)sum+=phi(n/p[i]);
		}
		cout<<sum<<endl;
	}
	return 0;
}

T2

标签:frac,函数,int,sum,笔记,ans,LL,欧拉,define
From: https://www.cnblogs.com/cppom/p/-/phinogros

相关文章

  • 系统科学方法概论第一章读书笔记
    第一章节的核心在于阐述系统方法的重要性和基本思想,以及如何将其应用于实际问题的解决中。系统方法是一种研究复杂问题的方法,它强调从整体上理解和解决问题,而不是仅仅关注局部或个别现象。在实际生活和工作中,我们经常遇到各种复杂的问题,这些问题往往涉及到许多相互关联的因素和变......
  • 系统科学方法概论第二章读书笔记
    第二章节的核心在于阐述系统工程方法的基本概念、特点和实施步骤,以及如何将其应用于实际问题的解决中。系统工程方法是一种综合性的方法,它结合了系统分析、系统设计和系统管理等多个方面的知识和技术。通过系统工程方法,我们可以对复杂系统进行有效的建模、分析、设计和控制,从而实......
  • 系统科学方法概论第三章读书笔记
    第三章节让我深刻理解了信息方法的基本概念、特点和作用,以及如何将其应用于实际问题的解决中。信息方法是一种研究信息的生成、传输、处理和利用的规律和方法。在系统科学中,信息方法具有重要的作用,因为系统的本质是信息的流动和处理。通过运用信息方法,我们可以更好地理解和控制系......
  • 系统科学方法概论第四章读书笔记
    控制方法是一种通过施加外部作用来调整和控制系统行为的方法。在系统科学中,控制方法具有重要的作用,因为系统的行为往往是复杂且难以预测的。通过运用控制方法,我们可以使系统保持稳定、可靠和高效,从而实现系统的目标。控制方法可以分为开环控制和闭环控制两种类型。开环控制是指根......
  • 构建之法阅读笔记
    《构建之法》阅读笔记《构建之法》是一本关于软件构建流程和工程化的书籍,作者是Robert  C.Martin。本书主要介绍了如何规范化地进行软件开发,以实现高效、高质量的软件构建过程。以下是我在阅读过程中的笔记和心得体会。一、本书的核心概念1.整洁代码:作者强调写出整洁、可维护的......
  • 文献笔记:LINE: Large-scale Information Network Embedding
    https://arxiv.org/pdf/1503.03578v1.pdf本文研究了将非常大的信息网络嵌入到低维向量空间的问题,这在可视化、节点分类和链路预测等许多任务中都很有用。大多数现有的图形嵌入方法无法扩展到通常包含数百万个节点的现实世界信息网络。在本文中,我们提出了一种名为“LINE”的新型网......
  • 最大流学习笔记
    (该笔记用于复习,请不要用此学习)最大流问题对于输入的一个有向图,对于一条边(u,v,w),我们建立一个图包含(u,v,w)和(v,u,0)dinic算法的步骤:1.对当前图进行bfs(只有边权>0的可以走),找到源点到每个点的最短路2.判断源点是否可以走到汇点(bfs完直接判断即可)可以->下一步不可以->返回当......
  • 组合数学 学习笔记
    1.几个组合恒等式\((1)C_n^m=C_n^{n-m}\)\((2)\sum\limits_{i=0}^{\min(n,m,k)}{C_n^i\timesC_m^{k-i}}=C_{n+m}^k\)\((3)\sum\limits_{i=0}^nC_n^i=2^n\)\((4)\sum\limits_{i=0}^n{c_n^i\timesi}=n\times2^{n-1}\)\((5)\sum\limits_{i=0}^{n}{C......
  • 树状数组学习笔记
    目录原理(结构)建树应用单点修改,区间求和区间修改,单点求值区间修改,区间求和单点修改,区间求最值求逆序对个数二维树状数组trick:树状数组上倍增权值树状数组正文1.原理引用日报图片。设黑色框内数组为\(a_1\toa_8\).可以推得\(c_i=a_......
  • cdq分治学习笔记
    简介cdq分治通过分治的思想可以在\(O(n\log^2n)\)的时间内(常数极小)解决如下问题:解决和点对有关的问题/解决偏序问题(三维偏序,动态逆序对)优化dp(拦截导弹)将动态问题转化为静态问题(城市建设)一.解决和点对有关的问题这种问题的通常表述:给定长度为\(n\)的序列,多次......