C#
#include <stdio.h>
int factor(long long n);
int main(){
long long num = 0;
long long max = 0;
for (long long i = 2; i < 1000000; i++)
{
if(factor(i) > max){
num = i;
max = factor(i);
}
}
printf("%lld\n",num);
}
int factor(long long n){//递归
while(n != 1){
if(n % 2 == 0)
return 1+factor(n/2);
else
return 1+factor(3*n+1);
}
}
JAVA
package exercise;
//import java.util.Scanner;
public class _最长考拉兹序列 {
public static void main(String[] args) {
// Scanner sc = new Scanner(System.in);
// long n = sc.nextLong();
// long sum =1;
// while(n!=1) {
// if(n%2==0) {
// System.out.print(n+"->");
// n=n/2;
// sum++;
// if(n==1) {
// System.out.println("1");
// break;
// }
// }
// if(n%2==1) {
// System.out.print(n+"->");
// n=3*n+1;
// sum++;
// if(n==1) {
// System.out.println("1");
// break;
// }
// }
// }
// System.out.println(sum);
long max = 0;
long num = 0;
for(long i =2 ;i<1000000;i++) {
if(factor(i) > max) {
num = i;
max = factor(i);
}
}
System.out.println(num);
System.out.println(max);
}
public static long factor(long i) {
long count = 1;
while(i != 1) {
if(i % 2 == 0)
i /= 2;
else
i = 3*i+1;
count++;
}
return count;
}
}
结果:837799