2021-05-31:怎么判断n个数俩俩互质?比如7,8,9任意两个数最大公约数是1,所以7,8,9两两互质。比如8,9
2021-05-31:怎么判断n个数俩俩互质?比如7,8,9任意两个数最大公约数是1,所以7,8,9两两互质。比如8,9,10不是两两互质,因为8和10的最大公约数是2。
福大大 答案2021-05-31:
方法一:两两判断最大公约数是否为1。时间复杂度是O(N^2)。
方法二:求乘积,然后求最大公约数。看起来时间复杂度是O(N),但求乘积的代价非常大,不如方法一。
方法三:遍历数组,求每个元素的质因数,然后存map。下一个元素求质因数,如果map里已经存在,说明不是两两互质了。时间复杂度O(N)。空间复杂度O(质因数个数)。对于小整数,此方法很不错。对于大整数,不如方法一。
代码用golang编写。代码如下:
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().Unix())
count := 0
const TOTAL = 100
for i := 0; i < TOTAL; i++ {
arr := genRandArr()
ret1 := IsTwoTwoPrime1(arr)
ret2 := IsTwoTwoPrime2(arr)
ret3 := IsTwoTwoPrime3(arr)
if ret1 == ret2 && ret1 == ret3 {
count++
}
fmt.Println(ret1, ret2, ret3, arr)
}
fmt.Println("总数:", TOTAL)
fmt.Println("正确数:", count)
}
func genRandArr() []int {
arrLen := rand.Intn(5) + 5
arr := make([]int, arrLen)
for i := 0; i < arrLen; i++ {
arr[i] = rand.Intn(1000) + 2
}
return arr
}
func IsTwoTwoPrime1(arr []int) bool {
if len(arr) <= 1 {
return true
}
for i := 0; i < len(arr)-1; i++ {
for j := i + 1; j < len(arr); j++ {
if Gcd(arr[i], arr[j]) > 1 {
return false
}
}
}
return true
}
func IsTwoTwoPrime2(arr []int) bool {
if len(arr) <= 1 {
return true
}
temp := arr[0]
for i := 1; i < len(arr); i++ {
if Gcd(temp, arr[i]) > 1 {
return false
}
temp *= arr[i]
}
return true
}
func IsTwoTwoPrime3(arr []int) bool {
if len(arr) <= 1 {
return true
}
primeSet := make(map[int]struct{})
for i := 0; i < len(arr); i++ {
temp := arr[i]
primeTempSet := make(map[int]struct{})
for j := 2; j*j <= arr[i]; {
if temp%j == 0 {
temp /= j
primeTempSet[j] = struct{}{}
} else {
if temp == 1 {
break
}
j += 1
}
}
if temp != 1 {
primeTempSet[temp] = struct{}{}
}
for primeTemp, _ := range primeTempSet {
if _, ok := primeSet[primeTemp]; ok {
return false
} else {
primeSet[primeTemp] = struct{}{}
}
}
}
return true
}
//最大公约数:【辗转相除法】
func Gcd(a int, b int) int {
//迭代
for b != 0 {
a, b = b, a%b
}
return a
}
执行结果如下:

2021-05-31:怎么判断n个数俩俩互质?比如7,8,9任意两个数最大公约数是1,所以7,8,9两两互质。比如8,9的更多相关文章
- 2021.05.03 T3 数字
2021.05.03 T3 数字 问题描述 一个数字被称为好数字当他满足下列条件: 1. 它有**2*n**个数位,n是正整数(允许有前导0) 2. 构成它的每个数字都在给定的数字集合S中. 3. 它 ...
- java 判断两个数是否异号
java 整型int占4个字节32位,两个数异或后移动31位判断结果,如果是1则异号,如果是0则同号 public class ShowEnviromentViarible { public stat ...
- 2021.05.14 tarjan
2021.05.14 tarjan 标准版tarjan 这里使用数组来模拟栈 void tarjan(int x){ ++ind; dfn[x]=low[x]=ind; stacki[++top]=x ...
- for循环练习题(1 ,判断任意一个数是91的多少倍 2,编写程序实现给定一个整数判断它从0到这个整数中间出现多少次9的次数)
1 //判断任意一个数是9的多少倍 #include <stdio.h> #include <stdlib.h> int main() { printf("请输入任意 ...
- http://www.cnblogs.com/peida/archive/2013/05/31/3070790.html深入理解Java:SimpleDateFormat安全的时间格式化
http://www.cnblogs.com/peida/archive/2013/05/31/3070790.html
- 2021.05.09【NOIP提高组】模拟赛总结
2021.05.09[NOIP提高组]模拟赛总结 T1 T2
- Sass函数-comparable 判断两个数是否可进行加减、合并
comparable() 函数主要是用来判断两个数是否可以进行“加,减”以及“合并”.如果可以返回的值为 true,如果不可以返回的值是 false: >> comparable(2px, ...
- 求两个数的最大公约数(Java)
获得两个随机数(100以内),并放入数组中 public int[] getTwoRandom(){ int[] t = new int[2]; Random rand = new Random(); ...
- C实现辗转相除法求两个数的最大公约数
什么是辗转相除法? 辗转相除法(又名欧几里德算法),它主要用于求两个正整数的最大公约数.是已知的最古老的算法. 用辗转相除法求132和72的最大公约数的步骤: 132 / 72 = 1 ... 60 ...
- 实现pow(int x, int y),即x的y次方 ; 异或交换两个数;
问题1:实现pow(int x, int y) ,即x的y次方 x的y次方就是有y个x连续乘机,代码如下: #include <stdio.h> #include <stdlib.h ...
随机推荐
- MySQL:查询语句 case when then 的用法
转载网址: https://blog.csdn.net/h123hlll/article/details/122366213
- subline Text 设置中文
subline Text是一个轻量级的文本编辑器,类似于记事本,不过它拥有代码高亮,简约好看的主题. 下载地址:https://download.sublimetext.com/sublime_tex ...
- 痞子衡嵌入式:RISC-V指令集架构MCU开发那些事 - 索引
大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是RISC-V指令集架构微控制器相关知识. RISC-V指令集最早要追溯到2010年,是加州大学伯克利分校的一个研究团队的项目,目标是设 ...
- Available parameters are [arg0, collection, list]错误的解决
关于这个错误 每次只要是俩list集合一嵌套起来,就会报出这个错误,检查过,并不是关键字的误用: 这个才是根本原因: 当mybatis传入参数为list集合的时候:mybatis会自动把其封装为一个m ...
- 在CentOS上编译最新版linux内核(linux-5.19.9)
从官网下载最新版的Linux内核源码,本教程使用linux-5.19.9进行编译. 实验环境(CentOS-Stream-8) $ uname -a Linux localhost.localdoma ...
- 集训第二周计划:把cf近期的div2除了最后一题给切完
太菜了太菜了,弄个训练计划. 晚上没事干的时候我想把博客园皮肤改一下,搜着搜着不知道怎么回事点进去一些竞赛选手的博客,比如这个 https://www.cnblogs.com/soda-ma/p/13 ...
- 再谈回声消除测评丨Dev for Dev 专栏
本文为「Dev for Dev 专栏」系列内容,作者为声网音视频实验室工程师 黄译庆. 音频质量的优化是一个复杂的系统工程,回声消除是其中一个老生常谈的话题,一般来说,回声消除的效果受设备本身的声学设 ...
- Why WebRTC|“浅入深出”的工作原理详解
前言 近几年实时音视频通信应用呈现出了大爆发的趋势.在这些实时通信技术的背后,有一项不得不提的技术--WebRTC. 今年 1 月,WebRTC 被 W3C 和 IETF 发布为正式标准.据调研机构 ...
- Java中的String类真的不可变吗?java面试常见问题
其实在Java中,String类被final修饰,主要是为了保证字符串的不可变性,进而保证了它的安全性.那么final到底是怎么保证字符串安全性的呢?接下来就让我们一起来看看吧. 一. final ...
- SpringBoot接入微信JSSDK,看这篇妥妥的
先给猴急的客官上干货代码 GitHub 接入微信JSSDK GitHub地址 Gitee 接入微信JSSDK GitHub地址 前言 事情的起因是因为疫情严重,领导要求做一个专题页,能够尽可能帮助所需 ...