2023-05-17:一个正整数如果能被 a 或 b 整除,那么它是神奇的。 给定三个整数 n , a , b ,返回第 n 个神奇的数字。 因为答案可能很大,所以返回答案 对 10^9 + 7 取模

2023-05-17:一个正整数如果能被 a 或 b 整除,那么它是神奇的。

给定三个整数 n , a , b ,返回第 n 个神奇的数字。

因为答案可能很大,所以返回答案 对 10^9 + 7 取模 后的值。

输入:n = 4, a = 2, b = 3。

输出:6。

答案2023-05-17:

过程描述:

1.计算 ab 的最小公倍数 lcm

2.初始化变量 l 为0,变量 r(n * min(a, b)),其中 min(a, b) 表示 ab 中的最小值。在这个范围内通过二分查找获得第 n 个神奇数字。

3.对于每个二分查找猜测值,计算在 ab中出现的神奇数字个数:m/a + m/b。然后计算 ab 的公共倍数 lcmm 范围内出现的神奇数字个数:m/lcm

4.如果出现的神奇数字总数大于或等于 n,则将当前猜测值存储在变量 ans 中,并将右边界向左移动一位(即缩小区间的范围)。

5.如果出现的神奇数字总数小于 n,则将左边界向右移动一位(即扩大区间的范围),并继续迭代。

6.二分查找过程结束后,返回答案 ans % (10^9 + 7)

时间复杂度为 O(logN),空间复杂度为 O(1)。

在这个算法中,使用了二分查找来搜索第 n 个神奇数字。在最坏情况下,二分查找的迭代次数为 O(logN)。因此,时间复杂度为 O(logN)。

另外,在算法中只使用了几个整数变量来存储值和计算结果,所以空间复杂度为 O(1)。

go完整代码如下:

package main

func nthMagicalNumber(n int, a int, b int) int {
	// 求a和b的最小公倍数
	lcm := int64(a / gcd(a, b) * b)
	var ans int64 = 0
	// l = 0
	// r = (long) n * Math.min(a, b)
	l, r := int64(0), int64(n)*int64(min(a, b))
	for l <= r {
		m := (l + r) / 2
		if m/int64(a)+m/int64(b)-m/lcm >= int64(n) {
			ans = m
			r = m - 1
		} else {
			l = m + 1
		}
	}
	return int(ans % 1000000007)
}

func gcd(a int, b int) int {
	if b == 0 {
		return a
	}
	return gcd(b, a%b)
}

func min(a int, b int) int {
	if a < b {
		return a
	}
	return b
}

func main() {
	n := 1000000000
	a := 40000
	b := 40000
	result := nthMagicalNumber(n, a, b)
	println(result)
}

在这里插入图片描述

rust完整代码如下:

fn nth_magical_number(n: i32, a: i32, b: i32) -> i32 {
    let n = n as i64;
    let a = a as i64;
    let b = b as i64;
    // 求a和b的最小公倍数
    let lcm = a / gcd(a, b) * b;
    let mut ans = 0;
    // l = 0
    // r = (long) n * Math.min(a, b)
    let mut l = 0;
    let mut r = (n * std::cmp::min(a, b));
    while l <= r {
        let m = (l as i64 + r as i64) / 2;
        if m / a as i64 + m / b as i64 - m / lcm as i64 >= n as i64 {
            ans = m;
            r = m - 1;
        } else {
            l = m + 1;
        }
    }
    (ans % 1000000007) as i32
}

fn gcd(a: i64, b: i64) -> i64 {
    if b == 0 {
        a
    } else {
        gcd(b, a % b)
    }
}

fn main() {
    let n = 1000000000;
    let a = 40000;
    let b = 40000;
    let result = nth_magical_number(n, a, b);
    println!("{}", result);
}

在这里插入图片描述

c语言完整代码如下:

#include <stdio.h>

long long gcd(long long a, long long b) {
    return b == 0 ? a : gcd(b, a % b);
}

int nthMagicalNumber(int n, int a, int b) {
    // 求a和b的最小公倍数
    long long lcm = (long long)a / gcd(a, b) * b;
    long long ans = 0;
    // l = 0
    // r = (long) n * Math.min(a, b)
    for (long long l = 0, r = (long long)n * (a < b ? a : b), m = 0; l <= r;) {
        m = (l + r) / 2;
        if (m / a + m / b - m / lcm >= n) {
            ans = m;
            r = m - 1;
        }
        else {
            l = m + 1;
        }
    }
    return (int)(ans % 1000000007);
}

int main() {
    int n = 1000000000;
    int a = 40000;
    int b = 40000;
    int result = nthMagicalNumber(n, a, b);
    printf("%d\n", result);
    return 0;
}

在这里插入图片描述

c++完整代码如下:

#include <iostream>
using namespace std;

long long gcd(long long a, long long b) {
    return b == 0 ? a : gcd(b, a % b);
}

int nthMagicalNumber(int n, int a, int b) {
    // 求a和b的最小公倍数
    long long lcm = (long long)a / gcd(a, b) * b;
    long long ans = 0;
    // l = 0
    // r = (long) n * Math.min(a, b)
    for (long long l = 0, r = (long long)n * min(a, b), m = 0; l <= r;) {
        m = (l + r) / 2;
        if (m / a + m / b - m / lcm >= n) {
            ans = m;
            r = m - 1;
        }
        else {
            l = m + 1;
        }
    }
    return (int)(ans % 1000000007);
}

int main() {
    int n = 1000000000;
    int a = 40000;
    int b = 40000;
    int result = nthMagicalNumber(n, a, b);
    cout << result << endl;
    return 0;
}

在这里插入图片描述

公众号:福大大架构师每日一题
本文转载于网络 如有侵权请联系删除

相关文章

  • Java8-Stream API

    大家好,又见面了,我是全栈君。了解Stream​Java8中有两个最为重要的改变,一个是Lambda表达式,另一个就是StreamAPI,针对常见的集合数据处理,StreamAPI提供了一种高效且易于使用的数据处理方式。什么是Stream基本概念​流(Stream)用于操作数据源所生成的元素序列。Java8给Collection接口增加了两个默认方法,它们可以返回一个StreamdefaultStreamstream(){ ​returnStreamSupport.stream(spliterator(),false); }//stream()返回的是一个顺序流 defaultStreamparallelStream(){ ​returnStreamSupport.stream(spliterator(),true); }//parallelStream()返回的是一个并发流 Stream自己不会存储元素。Stream不会改变源对象。相反,他们会返回一个持有结果的新Stream。Stream操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。基本示例首先这里有一个Employ

  • 2022年Java秋招面试求职必看的Java基础面试题

    前言不管你应聘的是大厂还是小厂,不管你是应届生还是架构师,面试官都会问到Java基础知识,特别是大厂比较注重个人的基础能力。掌握了基础,可以轻松搞定面试官,希望大家都能找到一份满意的工作。小编分享的这份2022年Java秋招备战面试题总计有1000多道面试题,包含了MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Java并发编程、Java基础、Spring、微服务、Linux、SpringBoot、SpringCloud、RabbitMQ、kafka等16个专题技术点,都是小编在今年金三银四总结出来的面试真题,已经有很多粉丝靠这份PDF拿下众多大厂的offer,今天在这里总结分享给到大家!【已完结】序号专题技术内容地址1MyBatisMybatis面试题https://cloud.tencent.com/developer/article/20261892ZooKeeperZooKeeper面试题https://cloud.tencent.com/developer/article/20269093DubboDub

  • Vue.js巧妙运用修饰符,完成更好的交互,并且帮你后期维护代码省下大量的时间

    Vue.js中的修饰符引言正文一、事件修饰符.stop.prevent.capture.self.once.passive修饰符的组合使用二、按键修饰符三、系统修饰键四、鼠标按钮修饰符五、其他修饰符.sync.native结束语引言其实我们在平时总会用到一些方法去处理我们的事件函数,比如阻止事件的默认行为、阻止事件冒泡等等。那在Vue.js中,对这些操作进行了一个很简易的处理,那就是在我们绑定的事件后面加一个事件修饰符,这样能让我们一眼就能看出,该组件绑定了什么事件、对事件做了什么处理,好了,我们来了解一下吧。正文在本文我就不详细介绍Vue.js是如何给组件绑定事件了的,大家都知道是通过v-on:事件="事件名"或者它的语法糖@事件="事件名"。Vue.js为我们提供了很多不同种类的修饰符,例如事件修饰符、按键修饰符、鼠标按键修饰符,我们就对这三种修饰符进行详细的介绍。一、事件修饰符首先,来看一下Vue.js为我们提供的事件修饰符有哪些吧。修饰符名称作用.stop阻止事件进行传递.prevent阻止事件的默认行为.capture使该事件最先触发.

  • Python|精辟冷知识(二)

    超级冷门的Python知识点,来给大家更文了,准备好的快来收听啦~1默认参数最好不为可变对象先来给大家科普一下,回顾一下知识点,函数的参数分为四种,包括: •默认参数 •可变参数 •关键字参数 •命名关键字参数 这四者的具体区别和它们的使用方法在廖雪峰(廖大神)的教程里会详细的解释。对这里感兴趣的话,大家可以自行去浏览观看一下。现在我们要说的是在传递默认参数的时候,很容易踩雷的一个坑。现在接着往下观看一下。先来看一个示例:deffunc(item,item_list=[]): item_list.append(item) print(item_list) #1 func('iphone')#------>['iphone'] #2 func('xiaomi',item_list=['oppo','vivo','honor']) #------->['oppo','vivo','honor',&#

  • 通过SCF回调COS上传对象信息到业务接口

    腾讯云COS在应用端实践中,由于是客户端直传至COS,对于业务服务器并未得到请求,也不知道客户端实际上传的内容,所以这里就需要通过上传COS后回调的方式来告知业务服务器。云函数SCF就很好的能满足这个场景需求。下面我们来做一个实践,看一下是怎么部署的。1.我们需要先创建一个SCF实例,在SCF控制台,进入函数服务,选择指定地域,选择新建。输入自己想要的函数名称选择运行环境为Python2.7模板可以选择helloword模板2.创建函数实例后,输入准备好的执行代码到窗口内完整代码信息如下fromqcloud_cos_v5importCosConfig fromqcloud_cos_v5importCosS3Client fromqcloud_cos_v5importCosServiceError fromqcloud_cos_v5importCosClientError importsys importlogging importurllib importurllib2 logging.basicConfig(level=logging.INFO,stream=sys.stdout)

  • 浅谈Android应用内悬浮控件实践方案总结

    在工作中遇到一个需求,需要在整个应用的上层悬浮显示控件,目标效果如下图:首先想到的是申请悬浮窗权限,OK~打开搜索引擎,映入眼帘的并不是如何申请,而是“Android悬浮窗权限各机型各系统适配大全、Android绕过权限显示悬浮窗…”,为什么悬浮窗权限会有这么多坑呢?悬浮窗可以在桌面显示,被恶意软件用来偷偷弹广告怎么办?作为一个系统级别的特殊权限,这是它应有的高傲––正确引导用户打开悬浮窗权限才是标准做法,若这就是定论的话这篇文章也没必要写了,我们绕过悬浮窗权限直接去显示,大多数是为了优化用户体验,并不是恶意的。有时我们只想在自己的应用内实现悬浮窗,然而Andorid并没有提供这样的方法,也只好退而求其此的去使用系统级别的悬浮窗权限。OK,既然可以绕过权限申请,再重新定义一下需求:尽量绕过申请权限,实现在app指定界面显示悬浮控件,控件的位置不需要改变怎么绕过悬浮窗权限呢?网上大多数通过WindowManager添加一个TYPE_TOAST类型的控件,如下:WindowManagerwindowManager=(WindowManager) applicationContext.get

  • 「MoreThanJava」Day 7:接口详解

    image「MoreThanJava」宣扬的是「学习,不止CODE」,本系列Java基础教程是自己在结合各方面的知识之后,对Java基础的一个总回顾,旨在「帮助新朋友快速高质量的学习」。当然不论新老朋友我相信您都可以从中获益。如果觉得「不错」的朋友,欢迎「关注+留言+分享」,文末有完整的获取链接,您的支持是我前进的最大的动力!Part1.接口概述Java是单继承的。这意味着子类仅从一个父类继承。通常,这就是你需要的。有时候多继承会提供方便,但也会造成混乱,例如,当继承的两个父类具有不同版本的签名相同的两个方法时该调用哪一个呢?接口为Java提供了多继承的一些优点,而没有缺点。接口的概念在Java程序设计语言中,接口不是类,而是对希望符合这个接口的类的一组需求。我们之前接触的抽象类,性格偏内向,描述的是一组相对具体的特征,比如某品牌特定型号的汽车,底盘架构、控制电路、刹车系统等是抽象出来的共同特征,但根据动感型、舒适型、豪华型的区分,内饰、车头灯、显示屏等都可以存放不同版本的具体实现。而接口是开放的,性格偏外向,它就像一份合同,定义了方法名、参数列表、返回值,甚至是抛出异常的类型。谁都可

  • SpringBoot整合外部servelt容器

    protectedWebApplicationContextcreateRootApplicationContext( ServletContextservletContext){ //1、创建SpringApplicationBuilder SpringApplicationBuilderbuilder=createSpringApplicationBuilder(); StandardServletEnvironmentenvironment=newStandardServletEnvironment(); environment.initPropertySources(servletContext,null); builder.environment(environment); builder.main(getClass()); ApplicationContextparent=getExistingRootWebApplicationContext(servletContext); if(parent!=null){ this.logger.info("Rootcon

  • 魔方全能小王子降临:一个完全不依赖人类知识的AI

    魔栗少女发自凹非寺 量子位出品|公众号QbitAI小时候,感觉大家都在玩魔方。我也买了一个,费尽脑细胞才拼出一层。然后,就没有然后了……后来遇到会玩魔方的小伙伴,我总是忍不住仰慕一下他的操作。但是没想到,有一天,我还能遇到一个会玩魔方的人工智能。最近,加州大学欧文分校的一个研究小组,发布了基于强化学习的魔方复原AI。这只AI完全不需要依靠人类的知识来解魔方,有速度有准度。据说没有它复原不了的魔方。除了这一种——△某机器人选手强力碎魔方魔方的正确打开方式如何让AI自己学会破解魔方?第一步是建立AI对魔方的基本认知。魔方有26个小方格,可以按照它们身上的贴纸数量来分类——中心,一张贴纸。边边,两张贴纸。角角,三张贴纸。这样一来,54张贴纸,每张都有自己独一无二的身份,即身属哪类方格,同一方格上的其他颜色有哪些。用独热编码(one-hotencoding)便可以轻松表示每张贴纸的位置。不过,由于每一张贴纸的位置不是独立的,而是和其他贴纸相关。这样,把表示方式降个维,每个方格可以只看一张贴纸。系统视角就是图中右边的样子——△右侧双色是降维后的视角然后,按朝向来标注魔方的6个面,前(F),后(B

  • Windows8小技巧(1)—Map Network Drive

    越来越多的企业和个人爱好者都在使用Windows8,但是作为微软新的操作系统,很多功能对于从xp或者vista用户转换过来的,可能显得不是很适应。但是Windows8在性能和多屏支持、平板支持。当然用户对待Metro风格和desktop应用的态度,目前还不好说。不过个人觉得Metro风格应用更适用平板电脑,而desktop还是在有键盘的PC或者笔记本上。但是同事反问我,那像Lenovo的Yaga和DELL的可旋转屏幕的XPS12应该安装那种系统风格呢?可能在微软看来,Windows8就是为了这些产品而开发的。云存储在国外和国内都已经很成熟,在日常工作中,基本上用云存储替代了U盘,特别是文件不是很大时。当然微软的Skydrive给老用户还有25G的空间,相信对于大多数用户来说已经足够了。当然国内有sina微盘,360网盘,百度云网盘之类的。因为Skydive相对稳定,然后又作为windows8的MicrosoftAccount,所以我使用的是Skydrive。微软在windows7中引入了"MapNetworkDrive(映射网络驱动器)"的功能。下面介绍如何在Win

  • Elasticsearch--Date math在索引中的使用

    在Elasticsearch,有时要通过索引日期来筛选某段时间的数据,这时就要用到ES提供的日期数学表达式   描述:  特别在日志数据中,只是查询一段时间内的日志数据,这时就可以使用日期数学表达式,这样可以限制检索的索引数量,减少集群的负载,提高系统性能。  几乎所有的API都支持日期索引中的数学参数值。  基于日期数学表达式的索引:<static_name{date_math_expr{date_format|time_zone}}>复制  其中各个字段的含义是:  static_name:索引名字的静态部分  date_math_expr:动态的日期表达式  date_format:格式化,默认是YYYY.MM.dd  time_zone:时区,默认是UTC需要注意的是,在使用时要把索引以及日期表达式的部分放在<>尖括号内。日期数学表达式的例子比如现在的时间是2024年3月22日中午12点.utc表达式表达式的值<test-{now/d}>test-2024.03.22<test-{now/M}>test-2024.03.01<

  • 我国区块链产业发展迅速,有望走在世界前列

    在第四次工业革命时代,随着人类在信息产生、获取和处理成本上的逐步降低,越来越多的技术可以支撑原有的商业模式向分布式进行转移,区块链便是其中之一。近年来区块链技术在全球范围内得到了越来越广泛的认可,世界各主要经济体及重要国际组织均在对区块链技术进行积极的探索和推进。在国内,金融机构、互联网公司、IT企业和制造企业也在积极投入区块链技术研发和应用推广,发展势头迅猛。比特币推波助澜,区块链有望青云直上12月1日美国监管当局宣布将允许比特币期货在芝加哥商业交易所(CME)和芝加哥期权交易所(CBOE)交易,7日比特币价格突破1.4万美元。整个区块链板块也随之走强,迅雷等概念股大涨,短短一个多月涨了5倍,美股市场上其他区块链相关的公司股票也开始火箭上涨。国内政策扶持力度加大8月1日国家互金专委会发布了《合规区块链指引》,研究了区块链技术发展和应用中存在的问题,并从技术、业务应用和监管层面对区块链的合规性进行研究和规范。11月28日娄底国家级区块链研究与应用试验区成立协调会在万宝新区召开,将成立首个国家级区块链研究与应用试验区。此外,11月24日首届天府金融博览会在成都西部博览城拉开序幕,成都高新

  • CSP-201809-3 元素选择器

           给出的就是一棵树的dfs序列,把树建立好。然后dfs询问就好了。我把所有不同的的属性和id都用一个唯一的正数离散化了,方便判断,其实直接比较string也可以,可以少写不少代码==。 我把一个整数数组和一个string起了一样的名字,然后string一直乱码检查半天,c++太迷了为什么不报错== 然后注意大小写敏感问题,要是不判断这个只有90.     1#include<bits/stdc++.h> 2usingnamespacestd; 3constintmaxn=110; 4 5 6intname[maxn],id[maxn]; 7map<string,int>NAME; 8inttot1=0,tot2=499; 9intdep[maxn]; 10intn,m; 11vector<int>g[maxn],ans,element; 12boolvis[1010]; 13voidsolve(intu,intcur,inttar){ 14vis[name[u]]=1; 15

  • Mac 配置环境变量

    cd~ vi.bash_profile 输入以下内容:   JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home  PATH=$JAVA_HOME/bin:$PATH:.  exportJAVA_HOME  exportPATH    然后source.bash_profile使配置生效。  

  • ios 解决数据请求json解析字典后,由于java某些类库转换json字符串后出现键值为&lt;null&gt;无法保存在userDefault的问题

    解决数据请求json解析字典后,由于java某些类库转换json字符串后出现键值为<null>无法保存在userDefault。 打印下得到的字典数据: “username”=<null> 此时如果将字典保存到userDefault中会报错 所以需要遍历字典将其替换 for(NSString*sin[Dict1allKeys]){ if([Dict1[s]isEqual:[NSNullnull]]){ [Dict1setObject:@""forKey:s]; } } [Dict2addEntriesFromDictionary:Dict1]; 复制 在oc中表示<null>,找了好久,与之等价的是[NSNull null]   YESorNO

  • nginx配置文件nginx.conf

    nginx安装后默认的配置文件为/usr/local/nginx/conf/nginx.conf,以下为默认配置文件的内容 #usernobody; worker_processes1; #error_loglogs/error.log; #error_loglogs/error.lognotice; #error_loglogs/error.loginfo; #pidlogs/nginx.pid; events{ worker_connections1024; } http{ includemime.types; default_typeapplication/octet-stream; #log_formatmain'$remote_addr-$remote_user[$time_local]"$request"' #'$status$body_bytes_sent"$http_referer"' #'"$http_user_agent""$http_x_forwarded_for"'; #access_loglogs/access.logmain; send

  • CocoStuff—基于Deeplab训练数据的标定工具【三、标注工具的使用】

    一、说明 本文为系列博客第三篇,主要展示COCO-Stuff10K标注工具的使用过程及效果。 *本文叙述的步骤默认在完成系列文章【二】的一些下载数据集、生成超像素处理文件的步骤,如果过程中有提示缺少那些文件的,请参照上一篇文章。 *占坑。因笔者做实验的服务器出了些许问题,暂时不能进行系统性的截图,先放一些占坑,后续补齐。 二、配置任务 -可以直接在Matlab打开项目目录后,输入startup()进入环境,再输入CocoStuffAnnotator()即可打开标注工具界面。 三、标注整理 -标注好的文件为mat格式的,要想提供给Deeplab使用必须先用convertAnnotationsDeeplab()进行转换,但坑爹的是我们自定义标注出的结果和他们提供的默认的标注集参数是不一样的,这里需要将该函数的某几行稍微改几行就好。 -标注好的mat文件需要整理到对应的文件下才能使用

  • XSS防御和绕过1

    原理:对用户输入没做过滤和处理,是用户可以输入一些东西(例如js),控制输出达到一些攻击目的 1.DOM型   基于DOM的XSS有时也称为type0XSS。当用户能够通过交互修改浏览器页面中的DOM(DocumentObjectModel)并显示在浏览器上时,就有可能产生这种漏洞,从效果上来说它也是反射型XSS。主要区别就是没有经过服务器后端处理   通过修改页面的DOM节点形成的XSS,称之为DOMBasedXSS。   前提是易受攻击的网站有一个HTML页面采用不安全的方式从document.location或document.URL或document.referrer获取数据(或者任何其他攻击者可以修改的对象)。 简单例子: 1<HTML> 2<TITLE>Welcome!</TITLE> 3Hi 4<SCRIPT> 5varpos=document.URL.indexOf("name=")+5; 6document.write(document.URL.substring(pos,document.URL.length));

  • Nginx反向代理

    作用:     用来统一不同环境的访问路径,(统一域名);DNS:域名解析服务器:windows下的位置:C:/Windows/System32/drivers/etc/hostslinux下的位置:/etc/hosts修改本机的host文件;switchHosts软件用来修改解决端口问题:常用的服务器:1.web服务器:apache,nginx,iis2.web应用服务器:tomcat,jetty,resionweb服务器不能解析jsp等页面,只能处理js,css,html等静态资源,并发能力强web应用服务器可以。Nginx的启动命令:启动:startnginx.exe停止:nginx.exe-sstop重新加载:nginx.exe-sreloadNginx的配置:  nginx.conf访问流程:用户访问:http://manage.taotao.com/rest/page/index域名解析:得到地址;127..0.0.1;因为端默认是80,被nginx监听到;Nginx将服务转发到:127.0.0.1:80

  • 蓝桥杯基础练习 十六进制转八进制(JAVA)

    问题描述 给定n个十六进制正整数,输出它们对应的八进制数。 输入格式   输入的第一行为一个正整数n(1<=n<=10)。   接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。 输出格式   输出n行,每行为输入对应的八进制正整数。 【注意】   输入的十六进制数不会有前导0,比如012A。   输出的八进制数也不能有前导0。 样例输入   2   39   123ABC 样例输出   71   4435274 【提示】   先将十六进制数转换成某进制数,再由某进制数转换成八进制。 解题思路     首先由题意可知这是一道常见的进制转换算法,器固定的思路就是将十六进制转成另一种进制,然后将另一种进制转成最终要转成的进制。显然此时的关键点在于中间作为中转的进制应该采用哪个。由问题描述可知每个十六进制数长度最长为100000,此时若采用十进制作为中转显然会非常不合适,所以这里我们采用二进制作为中转。接着具体实现思路分两步: (1)将十六进制数的每一位用四位二进制数表示,然后再将各位的二进制表示拼合再一起,得

  • [瞎搞]Beta 函数闲谈

    ajthreac又来学没用的东西了 屑ajthreac并没有系统地学习过数学分析,仅仅是因为看到有题可以用它优化而学习,以下的一些证明很有可能是瞎扯 Beta函数是与第二类欧拉积分Gamma函数齐名的第一类欧拉积分。 Beta函数的定义:\(\Beta(p,q)=\int_0^1x^{p-1}(1-x)^{q-1}\text{d}x\),显然\(\Beta(p,q)=\Beta(q,p)\)。 它拥有一个美妙的性质:\(\Beta(p,q)=\dfrac{\Gamma(p)\Gamma(q)}{\Gamma(p+q)}\)。 证明很简单,代换一下就出来了: \[\begin{aligned} \Gamma(p)\Gamma(q)&=\int_0^{+\infty}\text{e}^{-s}s^{p-1}\text{d}s\int_0^{+\infty}\text{e}^{-t}t^{q-1}\text{d}t\\ &=4\int_0^{+\infty}\text{e}^{-x^2}x^{2p-1}\text{d}x\int_0^{+\infty}\text{e}^{-y

相关推荐

推荐阅读