定义
冰雹猜想是指,一个自然数x,如果是奇数就乘以3再加1,如果是偶数就析出偶数因数2ⁿ,这样经过若干个次数,最终回到1。
适用条件
在小于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)));//较大数据验证
}
}