【JAVA】java递归测试考拉兹猜想/冰雹猜想

java递归测试考拉兹猜想/冰雹猜想

什么是考拉兹猜想:

考拉兹猜想是数学中最引人注目的难题之一,它也被称为奇偶归一猜想、3n+1猜想、冰雹猜想还有角谷猜想等等。这个猜想的很容易掌握,你只需要知道如何加1,如何除以2,以及何乘以3就行了。
然而,这般的简单性却与证明猜想本身的难度形成了鲜明的对比。著名数学家保罗·埃尔德什(Paul Erdös)曾说:“数学还没有做好准备面对这样的问题。”
在这里插入图片描述


运算规律

考拉兹猜想运算规律十分简单,首先,取一个任意正整数,根据以下规则进行运算:

  • 若数字为偶数,则将其除以2;
  • 若数字为奇数,则让其乘以3,再加1,再除以2;

代码示例

public class KaoLaZi {
	public static void main(String[] args) {
		int n=2100000000;						//n为随机值的最大值
		int num=(int) (Math.random()*n);		//取n范围内的随机正整数,Math.random()取0~1之间的随机值
		
		Ou a=new Ou();							//创建对象
		long jiNum=0;
		a.Ou(num,jiNum);						//调用方法,传参
	}
}
class Ou{
	public void Ou(int num,long jiNum) {		//构造方法
		/*
		 * 如果能被二整除,就除以二
		 * */
		if (num%2==0) {
			if (num<0) {
				num=-num;
			}
			num/=2;
			System.out.println(num);
			jiNum++;
			Ou(num,jiNum);//回调方法
		} 
		/*
		 * 如果是一,则停止运行
		 * */
		else if(num==1) {
			System.out.println("共执行:"+jiNum+"次");
		}
		/*
		 * 不能被2整除就乘3+1
		 * */
		else {
			if (num<0) {
				num=-num;
			}
			num=num*3+1;
			System.out.println(num);
			jiNum++;
			Ou(num,jiNum);						//回调方法
		}
		
	}
}

在这里插入图片描述//在以上代码中,我的数是取到了int的最大值:21亿;
//我的测试是在10亿范围经过考拉兹猜想的规则所有数都是回到了1;


//测试完毕,代码写的可能有些没那么好,还请各位大佬多多指点

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章