- 浏览: 627954 次
- 性别:
- 来自: 北京
最新评论
今天看到一个题在入门版.....
http://www.iteye.com/topic/728160
挪过来看看.
还是要接近3秒,cpu1.8G
2890,如果循环加上sysout要28000。。。
http://www.iteye.com/topic/728160
挪过来看看.
Crusader 写道
3x+1问题,它描述的是这样一个现象:
任取一个自然数,如果它是偶数,就把它除以2,如果它是奇数,就把它乘3再加上1。如此,就得到了一个新的自然数。再按照上述规则反复操作新产生的自然数,我们就会得到一串自然数,而最终得到的自然数序列将陷在4→2→1这个循环中。。。
如 5→16→8→4→2→1→4→2→1。。。
7→22→11→34→17→52→26→13→40→20→10→5→16→8→4→2→1→4→2→1。。。
这个猜想目前还无法证明,只能穷举,最闲的人已经验证到100*2的50次方。。。
运行的时候,循环改小点,否则估计要运行1千万年左右,应该都活不到那么长吧...
任取一个自然数,如果它是偶数,就把它除以2,如果它是奇数,就把它乘3再加上1。如此,就得到了一个新的自然数。再按照上述规则反复操作新产生的自然数,我们就会得到一串自然数,而最终得到的自然数序列将陷在4→2→1这个循环中。。。
如 5→16→8→4→2→1→4→2→1。。。
7→22→11→34→17→52→26→13→40→20→10→5→16→8→4→2→1→4→2→1。。。
这个猜想目前还无法证明,只能穷举,最闲的人已经验证到100*2的50次方。。。
运行的时候,循环改小点,否则估计要运行1千万年左右,应该都活不到那么长吧...
public class _3X1 { // 是否奇数 private static boolean isOdd(long i){ return (i&1L)==1L; } // 判断是否4 | 2 | 1 private static boolean is_4_2_1(long i){ return i==4 || i==2 || i==1; } // 判断是否2的次方,如果是,直接断定满足3x+1 private static boolean isPower2(long i){ int count = 0; while(i>0 && count<2){ i = i & (i-1L); count++; } return count==1; } // 满足3x+1猜想则返回true,否则死循环 public static boolean _3x1(long i){ int flag = 0; while(flag<3){ // 如果是奇数 if(isOdd(i)){ i = i*3L+1L; // 如果是偶数 }else{ i >>= 1; } if(is_4_2_1(i)){ flag++; }else{ flag=0; } } return true; } public static void main(String[] args) { for(long i=1; i<Long.MAX_VALUE; i++){ if(isPower2(i) || _3x1(i)){ System.out.println(i); } } } }
评论
6 楼
Crusader
2010-08-06
抛出异常的爱 写道
不加sysout
用时:1047
你可以试试你的机器上多少
用时:1047
你可以试试你的机器上多少
public class _3X1 { // 是否奇数 private static boolean isOdd(long i){ return (i&1L)==1L; } // 判断是否2的次方,如果是,直接断定满足3x+1 private static boolean isPower2(long i){ return 0 == (i & (i-1L)); } // 满足3x+1猜想则返回true,否则死循环 public static boolean _3x1(long i){ while(!isPower2(i)){ // 如果是奇数 if(isOdd(i)){ i += i>>1; i++; // 如果是偶数 }else{ i >>= 1; } } return true; } public static void main(String[] args) { long start = System.currentTimeMillis(); for(long i=1; i<1000000L; i++){ if(_3x1(i)){ //System.out.println(i); } } System.out.println(System.currentTimeMillis()-start); } }
还是要接近3秒,cpu1.8G
5 楼
抛出异常的爱
2010-08-06
不加sysout
用时:1047
你可以试试你的机器上多少
用时:1047
你可以试试你的机器上多少
public class _3X1 { // 是否奇数 private static boolean isOdd(long i){ return (i&1L)==1L; } // 判断是否2的次方,如果是,直接断定满足3x+1 private static boolean isPower2(long i){ return 0 == (i & (i-1L)); } // 满足3x+1猜想则返回true,否则死循环 public static boolean _3x1(long i){ while(!isPower2(i)){ // 如果是奇数 if(isOdd(i)){ i += i>>1; i++; // 如果是偶数 }else{ i >>= 1; } } return true; } public static void main(String[] args) { long start = System.currentTimeMillis(); for(long i=1; i<1000000L; i++){ if(_3x1(i)){ //System.out.println(i); } } System.out.println(System.currentTimeMillis()-start); } }
4 楼
Crusader
2010-08-06
public class _3X1 { // 是否奇数 private static boolean isOdd(long i){ return (i&1L)==1L; } // 判断是否4 | 2 | 1 private static boolean is_4_2_1(long i){ return i==4 || i==2 || i==1; } // 判断是否2的次方,如果是,直接断定满足3x+1 private static boolean isPower2(long i){ return 0 == (i & (i-1L)); } // 满足3x+1猜想则返回true,否则死循环 public static boolean _3x1(long i){ int flag = 0; while(flag<3){ // 如果是奇数 if(isOdd(i)){ i = i*3L+1L; // 如果是偶数 }else{ if(isPower2(i)) return true; i >>= 1; } if(is_4_2_1(i)){ flag++; }else{ flag=0; } } return true; } public static void main(String[] args) { long start = System.currentTimeMillis(); for(long i=1; i<1000000L; i++){ if(_3x1(i)){ //System.out.println(i); } } System.out.println(System.currentTimeMillis()-start); } }
2890,如果循环加上sysout要28000。。。
3 楼
抛出异常的爱
2010-08-05
增加cache版
10^6 使用时间4547
效率十倍左右
10^6 使用时间4547
效率十倍左右
import java.util.HashSet; import java.util.Set; import org.apache.commons.lang.StringUtils; public class ThreeXone { Set cache = new HashSet< Long>(); /** * @param args */ public static void main(String[] args) { ThreeXone x = new ThreeXone(); x.cache.add(1L); long start = System.currentTimeMillis(); for(int i = 0 ; i <100000 ;i++){ x.mySelf(i); } long end = System.currentTimeMillis(); System.out.println("使用时间"+(end - start) ); } long trimZero(long bin){ String str = Long.toBinaryString(bin); String result = StringUtils.substringBeforeLast(str, "1")+1; return Long.valueOf(result,2); } long funcOdd (long odd ){ odd += odd>>1; odd ++; return odd; } void mySelf(long bin ){ long result = 0; //System.out.print(bin+"->"); long odd = trimZero(bin); if(isInMap(odd)){ //System.out.println(); return; }else{ result = funcOdd(odd); mySelf(result); cache.add(bin); } } boolean isInMap(long odd) { return cache.contains(odd); } }
2 楼
抛出异常的爱
2010-08-05
大家如果想用int则录入值不能大于10^5
(会溢出)
(会溢出)
1 楼
抛出异常的爱
2010-08-05
10^5 速度2秒左右
10^6 速度39438
想法.
1,偶数除2等效于二进制去掉尾0
2.奇数乘3必为奇数 再+1必为偶数 等效为 2x + x +1 x左移1 + x +1
如果都除2等效为 x+ x右移1 +1
10^6 速度39438
想法.
1,偶数除2等效于二进制去掉尾0
2.奇数乘3必为奇数 再+1必为偶数 等效为 2x + x +1 x左移1 + x +1
如果都除2等效为 x+ x右移1 +1
import org.apache.commons.lang.StringUtils; public class ThreeXone { /** * @param args */ public static void main(String[] args) { ThreeXone x = new ThreeXone(); long start = System.currentTimeMillis(); for(int i = 0 ; i <10^6 ;i++){ x.mySelf(i); } long end = System.currentTimeMillis(); System.out.println(end - start ); } long trimZero(long bin){ String str = Long.toBinaryString(bin); String result = StringUtils.substringBeforeLast(str, "1")+1; return Long.valueOf(result,2); } long funcOdd (long odd ){ odd += odd>>1; odd ++; return odd; } void mySelf(long bin ){ long result = 0; //System.out.print(bin+"--"); long odd = trimZero(bin); if(odd==1){ //System.out.println(); return; }else{ result = funcOdd(odd); mySelf(result); } } }
发表评论
-
关于四维的问题
2016-04-22 14:14 1183知乎:为什么人类想象不出四维的空间? https://www. ... -
freemind 怎么处理成为word
2015-06-11 19:37 16写文章用freemind打了一个草稿. 先导出成为htm ... -
油猴对抗一般广告
2012-11-14 00:07 1886看小说 好多好多的广告是必然的.. 所以 去掉iframe 去 ... -
油猴对抗google抽疯
2012-10-23 16:25 1807http://www.iteye.com/topic/1127 ... -
今天想回又想这样回会不会很损
2010-12-07 11:51 2708http://www.iteye.com/topic/8337 ... -
转贴:如何在面试中发现优秀程序员
2010-09-30 10:09 3174http://www.aqee.net/2010/09/29/ ... -
百度大战QQ
2010-09-16 14:46 1803不知道怎么发新闻..... 百度正在内测 http://t.b ... -
牛X是种态度(答复: 对于水平一般的程序员,技术要深度还是广度)
2010-08-23 09:29 2619zlt2000 写道建议楼主应 ... -
哲学问题
2010-07-12 09:37 1125[url="http://www.iteye.com ... -
三人法则
2010-06-18 15:37 1333一个人只能去适应你所在的环境.当有三个人的时候.你就拥有改变环 ... -
各种被代表的不鸣真象的群棕
2010-06-02 17:32 1624昨天 今天 看了一个贴子被隐了 它不应该被隐 看见一个贴子 ... -
开始找工作,另帮同事一起找活干,有猎头可直接联系
2010-03-24 11:51 8542由于特别的原因开始找工作了 另:帮同事一起找工作。 同事们都 ... -
怎么样写项目描述
2010-03-24 03:05 3619引用 自助交易平台 设计并开发包括用户,平台帐户,仓储等模块 ... -
房子恶梦
2010-03-18 11:20 1675喜欢新技术 说 (11:10): http://ww ... -
电影宅帮个忙
2010-01-12 16:06 1608亲爱的电影达人 我在看这个短片时只能认出其中几部电影 ... -
汉经学,晋清谈
2009-11-30 09:05 1337在网络上比较有名的坛子都存在两种人. 1.经学:把大师的话当 ... -
恒河沙, 一年即一生
2009-10-14 09:21 1676每三个月跳槽一次.... 一年可了认识4*20左右的人 5-8 ... -
倒得精 连载<一>
2009-05-08 10:47 1143[原文] 上德不德,是以有德。下德不失德,是以無德。 上德, ... -
真孙子
2009-03-04 10:22 0孙子曰: 引用兵者, ... -
塔希里亚故事集II 出书了
2009-01-22 16:11 943最喜欢看的漫画 风格比剑风还好 如果以上算是软文的话. 那么 ...
相关推荐
本文证明了Collatz 3x+1问题的下列同高定理,给出无限多类型的长分别为3、4和15的同高连续正整数: (1)连续正整数C_t-1,C_t-2,C_t-3有相同的高,其中C_t=2~(46t+40)m+2~(64t+32); (2)连续正整数d_t-1,d_t-2,d_t-3和d_t-...
证明3x+1猜想仍是一个开放的数学问题,等待着数学家们的智慧去解决。 总的来说,这篇文章通过3x+1猜想的模6特性,结合二叉树的理论,提出了一个新的视角来研究这一长期未解的猜想。虽然尚未能给出决定性的证明,但...
分享一套关于酒店管理系统开发的教程——基于SpringBoot3.x+Vue3.x整合从0到1一步一步实现酒店管理系统,学完本课程,您将收获:增加项目实战经验;学习SpringBoot项目应用中遇到各种问题;学会使用前后端分离开发! ...
### 3x+1问题滑动特性研究 #### 摘要 本文研究了3x+1问题中的滑动特性,即从任意正整数n出发,在经历一系列操作后达到比n小的第一个数k(如果存在)的过程中,“乘以三加一”与“除以二”的次数之间的关系。通过...
有关3x+1问题的一些新结果,蒋愉,吴栋梁,本文主要研究了公开的数学难题--3x+1问题。利用专业数学软件Mathematica 5.0,我们给出了一个较R.E.Crandall之前给出的更为完整和丰富的表格
3. 使用递归调用`fun(x, n-1)`计算前n-1项的和,然后将当前项的值加到这个和上,返回结果。 在主函数`main`中,程序会提示用户输入x和n的值,然后调用`fun`函数并存储结果在变量`s`中,最后打印出`s`的值。 在程序...
数学证明之 x^2 = 1^2+2^2+3^2+...+n^2 在数学领域中,证明x^2 = 1^2+2^2+3^2+...+n^2是一项基本的任务...证明x^2 = 1^2+2^2+3^2+...+n^2的方法有多种,可以使用数学归纳法、Lucas' 平方金字塔问题或数学分析的方法。
指数为1的项略去指数1,如3x。 (3)多项式a和b相加,建立多项式a+b。 (4)多项式a和b相减,建立多项式a-b。 【测试数据】 (1)(2x+5x8-3.1x11)+(7-5x8+11x9) = (-3.1x11+11x9+2x+7) (2)(6x-3-x+4.4x2-1.2x9)-(-...
3. **问题解决**:试题可能包含案例分析或问题解决部分,要求考生运用所学知识解决实际问题,以考察其分析和解决问题的能力。 4. **职业道德与法规**:初级试题也会涵盖行业内的职业道德标准和相关法律法规,以确保...
"1+X 初级 Java程序设计基础 1-9 章测试题汇总"是一个针对初级Java程序员的全面学习资源,旨在帮助学习者巩固和提升Java编程技能。这个资料集合了蓝桥官网的1到9章测试题,覆盖了Java语言的基础概念、语法和常用编程...
1. 内核:TMS320C54X+ DSP的内核采用流水线设计,分为取指、解码、执行等多个阶段,能实现每周期多条指令的并行处理。 2. 寄存器:包括32个通用寄存器和多个专用寄存器,如累加器、程序计数器等,增强了数据处理...
设有一元多项式Am(x)和Bn(x),Am(x)=A0+A1x1+A2x2+A3x3+… +Amxm,Bn(x)=B0+B1x1+B2x2+B3x3+… +Bnxn,请实现求M(x)= Am(x)+Bn(x)、M(x)= Am(x)-Bn(x)和M(x)= Am(x)×Bn(x)。 分别采用顺序和链式存储结构实现;结果...
3. **插件系统**:Notepad++ 的一大亮点在于其丰富的插件库,如NppFTP用于FTP文件传输,Git插件进行版本控制,以及CodeFolding用于代码折叠,这些插件极大地扩展了编辑器的功能。 4. **用户界面定制**:用户可以...
x年出生的母牛从第x+m年开始到第x+n年止(含, 1 )每年生小母牛一头,并在第x+p(n )年被淘汰。设第0年有刚出生的小母牛一头,求第k(k > 0)年存栏母牛多少头。 【输入形式】 从标准输入上顺序读入正整数m、n、p、k...
12. **具体问题分析**:例如,函数f(x)=sin(ωx)在区间[a,π/3]上有最小值但没有最大值,那么ω的可能值为8k-π/3,k∈Z,其中k=1时ω=8-π/3。 以上就是关于函数y=Asinωx+φ的特性讲解,这些知识在解决实际问题和...
在计算-x(x3+2x-1)+(2x-1)(3x+2)这类问题时,需确保每一项都被正确地乘以。 解决这些错误的关键在于熟练掌握幂的运算法则,正确理解同底数幂的加减乘除规则,注意负号和括号的影响,以及在展开和合并同类项时...