2

所以,我只是想创建一个循环来运行“3n+1”公式,当我输入一个负数时,我陷入了一个无限循环,余数为 0 和 -1。

这是正确的还是我的代码遗漏了什么?

这是我的代码:

    Scanner scan = new Scanner(System.in);
    number = 0;
    method = 0;
int counter= 0;

if(scan.hasNextInt()){
     number = scan.nextInt();
  int original = number;
 while(number!=1){
      method = number%2;
     if(method==0){
    number = number/2;
 }else number = number*3+1;
 counter +=1;
  System.out.println(number);
  System.out.println("the remainder was "+method);
 }


 System.out.println("The original number was "+original);
 System.out.println("it took " + counter+ " times to reach 1.");



}else System.out.println("please enter a number");
4

2 回答 2

4

该猜想仅适用于自然数(即正整数 1、2、3、...)。如果要将其扩展到 0 和负数,则必须使用其他公式。查看https://en.wikipedia.org/wiki/Collat ​​z_conjecture 上的“对更大域的扩展” 。

于 2016-01-10T05:18:06.273 回答
0

形成了几个循环。进一步的谷歌搜索会告诉你有 3-4 个(谷歌的精确计数)循环形成。然后其余的负数也应该回落到 $-1$,或者换句话说,与正面情况“类似”。所以你陷入了第一个循环!哈哈

我认为应该考虑将其扩展到整数组,以便有希望立即应用 Group Cohomology 技术而不是 Monoid Cohomology 技术(较少探索)。

于 2022-02-08T06:22:46.557 回答