如何判断两个数互质?三个数两两互质?……N个数两两互质?(Java代码实现)

(一)、互质的概念:公约数只有1的两个数叫做互质数。根据这一定义可以对一组数是否互质进行判断。如:2和7的公约数只有1,则它们是互质数。 

(二)、判断互质的方法大概来讲有三种

             一、根据互质的概念:

                         如果两个数的的公约数只有1,那它们是互质数。如:2和7的公约数只有1,则它们是互质数。

             二、直接判断法:

                         根据定义可总结一些规律:                         

                        (1)1和其他所有的自然数一定是互质数。如:1和3是互质数。

                        (2)两个连续的自然数一定是互质数。如:3和4是互质数。

                        (3)相邻的两个奇数一定是互质数。如:7和9是互质数。

                        (4)两个不相同的质数一定是互质数。如:11和13是互质数。

                        (5)较大数比较小数的2倍多1或少1,这两个数一定是互质数。如:27和55是互质数。

                        (6)两个数中的较小一个是质数,而较大数是合数且不是较小数的倍数,这两个数一定是互质数。如:2和21是互质数。

                        (7)两个数中的较大一个是质数,这两个数一定是互质数。如:3和23是互质数。

              三、分解质因数法:

                        (1)其中一个数较小: 两个数都是合数,把小数分解质因数,小数的因数都不是大数的因数时,这两个数互质。如:165 = 3 x 5 x11 , 5083 = 13 x 17 x23 , 大数的因数中不包括小数的因数,所以两个数互质。

                           注:合数是指自然数中除了能被1和本身整除外,还能被其他数(0除外)整除的数,也就是一个数能分解成若干个数相乘得出的。

                         (2) 两个数都较大并且值相近时,把它们的差分解质因数,差的所有质因数都不是小数的因数时,这两个数互质。如:1309 = 7 x 11 x 17和1235 , 1309 - 1235 = 74,74 = 2 x 37 和最小的数的因数没有相同的数,所以 1309 和 1235 互为质数。

                         (3)大数除以小数的余数(大于1)的所有质因数都不是小数的因数时,这两个数互质。(既辗转相除法)

                                  例如:【不停地用除数除以上一次作除法时得到的余数,直到能够除尽为止】

                                   5083 ÷ 165 = 30……133

                                   165  ÷ 133 = 1……33

                                   133 ÷ 33 = 4……1

                                   33 ÷ 1 = 33

                                   能除尽了。
                                              所以,5083 与165的最大公因数为1,是互质数。

                                   最小公倍数为
                                              5083 ×165=8388695

下面是代码实现,把要比较的数放到一个数组中,可以同时实现比较多个数。原理:两两进行比较元素的公因数是否相等,如果不相等,则互质,否则不互质。


import java.util.ArrayList;
import java.util.List;

/**
 * 
 * <p>Title:TestDemo<p>
 * @author X
 * @编写日期:2018年9月14日
 */
public class TestDemo {
    public static void main(String[] args) {
           //测试
		   int arr[] = {2,7};
		   System.out.println(checkRelativelyPrime(arr));
	}
    //判断思路,比较数组中两个数的公约数是否有相同的,没有则互质,简单实现
    public static boolean checkRelativelyPrime(int arr[]) {
    	boolean flag = true;
    	//1.先判断数组中是否有相同元素
    	if(checkSame(arr)) {
    		//2.两两比较数组中的元素的公因数
	    	for(int i = 0;i < arr.length-1;i++) {
	    		List <Integer>list1 = calcfactors(arr[i]);
	    		for(int j = i+1;j < arr.length;j++) {
	    			List <Integer>list2 = calcfactors(arr[j]);
	    		     if(isRepeat(list1,list2)) {
	    		    	 flag = true;
	    		    	 }
	    		     else {
	    		    	 flag = false;
	    		         return flag;
	    		         }
	    		}		
	    	}
    	}
    	return flag;
    }
    //计算一个数的公因数
    public static List<Integer> calcfactors(int number) {
    	   List<Integer> listFactors = new ArrayList<Integer>();
    	   //不包括1,从二开始
    	   for(int i = 2;i<=number;i++) {
    		   if(number%i==0) {
    			   listFactors.add(i);
    			   
    		   }
    	   }
    	   for(Integer m:listFactors) {
    		   System.out.println(m);
    	   }
    	   return listFactors;
    } 
    //判断数组中是否有相同的数
    public static boolean checkSame(int arr[]) {
    	   for(int i = 0;i<arr.length-1;i++) {
    	          if(i+1<arr.length&&arr[i]==arr[i+1]) 
    	    		  return false;
    	   }
    	   return true;
    } 
    public static boolean isRepeat(List<Integer> List1,List<Integer> List2) {
   		for (int i = 0; i < List1.size(); i++) {
   			for (int j = 0; j < List2.size(); j++) {
   				if(List1.get(i)==List2.get(j)) 
   					return false;
   			}
   		}
   		return true;
   	}
}

 

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值