首页 > 其他分享 >Math

Math

时间:2022-11-06 15:46:24浏览次数:41  
标签:frac gcd int return inline Math 函数

Math

1. 积性函数

定义:若函数\(f(n)\)满足\(f(1) = 1\)&&\({\forall}{x,y}{\in}{N^{*}},gcd(x,y)=1\)都有\(f(xy)=f(x)*f(y)\)则\(f(n)\)为积性函数

​ 若函数\(f(n)\)满足\(f(1)=1\)&&\({\forall}{x,y}{\in}{N^{*}}\)都有\(f(x,y)=f(x)*f(y)\)则\(f(n)\)为完全积性函数

性质:

​ 若\(f(x),g(x)\)均为积性函数那么下面也为积性函数

\[ h(x) = f(x^p)\\ h(x) = f^P(x)\\ h(x) = f(x)*g(x)\\ h(x) = {\sum}\limits_{d\mid x}{f(d)g(\frac{x}{d})} \]

例子:

欧拉函数,莫比乌斯函数

2.素数

暴力判断素数;

我们很明显可以发现:如果\(x\)是\(a\)的约数,那么\(\frac{a}{x}\)也是\(a\)的约数

inline bool init(int x)
{
    if(x < 2) return 0;
	for(int i = 1 ; i * i <= x ; i ++ )
    {
        if(x % i == 0) return false ;
    }
    return true ;
}

3.gcd,lcm

  1. STL :
int gcd =  __gcd(x,y)
  1. 欧几里得
inline int gcd(int a , int b)
{
	if(b == 0) return a ;
	return (b , a % b) ;
}
inline int lcm(int a , int b)
{
	1. return (a * b) / __gcd(a,b) ;
	2. return (a * b) / gcd(a,b) ;

4.扩展欧几里得算法

\(求ax+by=gcd(a,b)\)的一组可行解

\[ax_1 + by_1 = gcd(a,b) \\ bx_2 +(a\ mod\ b)y_2 = gcd(a,b)\\ 显然gcd(a,b)=gcd(b,a\ mod\ b)\\ a\ mod\ b = a - \left \lfloor {\frac{a}{b}} \right \rfloor *b \\ \text{可以得到} \\ ax_1+by_1=bx_2+(a- \left \lfloor {\frac{a}{b}} \right \rfloor *b)y_2\\ ax_1+by_1=bx_2+ay_2-by_2 {\left \lfloor {\frac{a}{b}} \right \rfloor } \\ ax_1+by_1=b(x_2-y_2\left \lfloor {\frac{a}{b}} \right \rfloor)+ay_2\\ x_1 = y_2 , y_2 = x_2-y_2{\left \lfloor {\frac{a}{b}} \right \rfloor} \]

inline void exgcd(int a , int b ,int &x , int &y)
{
    if(b == 0)
    {
        x = 1 ;
        y = 0 ;
        return ;
    }
    exgcd(b , a % b , y , x) ;
    y = y - (a / b) * x ;
}

5.筛法

  1. 埃氏筛:我们考虑一个数的倍数肯定也是素数就有了埃氏筛:

    inline void init(int n)
    {
    	int p = 0 ;
    	for(int i = 0 ; i <= n ; i ++ ) is_prime[i] = true ;
        is_prime[0] = is_prime[1] = 0 ;
        for(int i = 2 ; i <= n ; i ++ )
        {
            if(is_prime[i])
            {
                prime[p++] = i ;
                if(i * i <= n)
                {
                    for(int j = i * i ; j <= n ; j += i)
                    {
                        is_prime[j] = 0 ;
                    }
                }
            }
        }
        return p ;
    }
    

    2.线性筛(欧拉筛法)

    inline void init(int n)
    {
        for(int i = 2 ; i <= n ; i ++ )
        {
            if(use[i] == 0) prime[++cnt] = i ;
            for(int j = 1 ; j <= cnt && prime[j] * i <= n ; j ++ )
            {
                use[i*prime[j]] = 1 ;
                if (i % prime[j] == 0) break ;
            }
        }
    }
    

    3.筛法求欧拉函数

    inline void init(int n)
    {
    	in_prime[1] = 0 ;
        phi[1] = 1 ;
        for(int i = 2 ; i <= n ; i ++ )
        {
            if(is_prime[i] == false) prime[++cnt] = i , phi[i] = i - 1 ;
            for(int j = 1 ; j <= cnt && prime[j] * i <= n ; j ++ )
            {
                is_prime[i * prime[j]] = 0 ;
                if(i % prime[j] == 0)
                {
                    phi[i * prime[j]] = phi[i] * prime[j]  ;
                    break ;
                }
                else  phi[i*prime[j]] = phi[i] * phi[prime[j]] ;
                
            }
        }
    }
    
  2. 筛法求莫比乌斯函数

    inline void init(int n)
    {
    	mo[1] = 1 ;
    	for(int i = 2 ; i <= n ; i ++ )
    	{
    		if(use[i] == false) prime[++cnt] = i , mo[i] = -1 ;
            for(int j = 1 ; j <= cnt && prime[j] * i <= n ; i ++ )
            {
                use[i*prime[j]] = true ;
                if(i % prime[j]) break ;
                mo[i*prime[j]] = - mo[i];
            }
    	}
    }
    

标签:frac,gcd,int,return,inline,Math,函数
From: https://www.cnblogs.com/guier/p/16862706.html

相关文章

  • Mathis Petrovich-2021-Action-Conditioned-3D-Human-Motion-Synthesis-with-Transfor
    #Action-Conditioned3DHumanMotionSynthesisWithTransformerVAE#paper1.paper-info1.1MetadataAuthor::[[MathisPetrovich]],[[MichaelJ.Black]],[......
  • [Mathematical Analysis] 函数极限与连续函数(待续……)
    写在前面要当一个创造者。整理这些笔记是为了有所创造。要有所创造,就必须对我所讨论的问题本身有充分的理解,创造的就是在理解和归纳的过程中找到的最符合我个人的最自然......
  • 为什么你必须链接C中的MATH库?
    原文链接为什么你必须链接C中的MATH库?如果在C程序中包含<stdlib.h>或<stdio.h>,那么在编译时就不必将它们链接起来,但是我必须使用-lm和gcc链接到<math.h>,例如:gcctest.c......
  • JavaScript对象Date和JavaScript对象Math
    4.Date:日期对象1.创建:vardate=newDate();2.方法:toLocaleString():返回当前dat......
  • 鄂维南院士:The Dawning of a New Era in Applied Mathematics
    获取文章pdf文件请在本公众号回复关键词"大应用数学宣言"。这是鄂老师刚刚发表在美国数学会会刊的文章,被称为是“大应用数学宣言”。“这也是我几十年来苦苦追求应用数学出......
  • Math
    第一章_函数极限映射和函数映射定义:\(\mathrm{D}_\mathrm{f}\)=X,每个X集合元素有对应像与之对应(\(\mathrm{R}_\mathrm{f}\)CY)一个x的像对应一个y,一个y的原像......
  • java math和random注意项总结以及包装类
    Math功能:复杂的数学运算Random功能:用于产生随机数注意:固定种子生成随机数的序列是一样的(序列中的数字是不一样的)packagetest;publicclasstest8{publicstatic......
  • java常用API--->Math数学工具
    介绍Math类是java.lang包中的类,它支持算术运算如平方根,计算绝对值等。算术计算Math.sqrt(Number);//计算Number的平方根Math.cbrt(Number);//计算Number的立方根Math.......
  • JavaScript--Math
    一、概述ECMAScript提供了Math对象作为保存数学公式、信息和计算的地方。Math对象提供了一些辅助计算的属性和方法。注意:Math对象上提供的计算要比直接在JavaScrip......
  • L:python基础知识:数学运算函数,字符串内置函数,math数学模块,random随机模块,datetim
    数学运算函数asb(x)返回绝对值divmod(x,y)返回一个(x//y,x%y)的元组,可以用两个变量来接收它max(seq),min(seq)返回seq序列的最大值,最小值pow(x,y)返回x的y次方round(x,p......