冰雹猜测是指,一个天然数x,若是是奇数就乘以3再加1,若是是偶数就析出偶数因数2ⁿ,这样通过若干个次数,最终回到1。git
在小于7*10^11的全部的天然数。测试
(一)输入N (二)递归调用 while(N!=1){ if(N为偶数) while(N%2==0){ N=n/2; } Else N=n*3+1; } (三)退出循环则验证成功
package 冰雹猜测; import java.util.Scanner; public class Collatz { public static void main(String[] args) { int x = 0; do { System.out.println("请输入一个天然数"); Scanner reader = new Scanner(System.in); x = reader.nextInt(); } while (x <= 0 || x > 7 * Math.pow(10, 11)); dispose a = new dispose(); a.dispose(x); } }
package 冰雹猜测; public class dispose { public int dispose(int x) { int i = 0; while (x != 1) { if (x % 2 == 0) { while (x % 2 == 0) { x = x / 2; } } else { x = x * 3 + 1; } i++; System.out.println(+i + "次运行后结果为" + x); } System.out.println("已验证"); return x; } }
package Collatz; import Collatz.dispose; import junit.framework.TestCase; public class disposeTest extends TestCase { dispose d=new dispose(); public void testDispose() { assertEquals(1,d.dispose(1));//边界 assertEquals(1,d.dispose(24));//偶数 assertEquals(1,d.dispose(27));//奇数,强悍的27验证 assertEquals(1,d.dispose(7 * (int)Math.pow(10, 10)));//较大数据验证 } }