UVa 100 / HDU 1032 / POJ 1207 The 3n + 1 problem (数论&Collatz序列周期)

计算机算法设计与分析(第三版)课后习题答案详解 立即下载

100 - The 3n + 1 problem

Time limit: 3.000 seconds

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=29&page=show_problem&problem=36

http://acm.hdu.edu.cn/showproblem.php?pid=1032

http://poj.org/problem?id=1207

Background

Problems in Computer Science are often classified as belonging to a certain class of problems (e.g., NP, Unsolvable, Recursive). In this problem you will be analyzing a property of an algorithm whose classification is not known for all possible inputs.

The Problem

Consider the following algorithm:

 
		1. 		 input n

2. print n

3. if n = 1 then STOP

4. if n is odd then tex2html_wrap_inline44

5. else tex2html_wrap_inline46

6. GOTO 2

Given the input 22, the following sequence of numbers will be printed 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

It is conjectured that the algorithm above will terminate (when a 1 is printed) for any integral input value. Despite the simplicity of the algorithm, it is unknown whether this conjecture is true. It has been verified, however, for all integers nsuch that 0 < n < 1,000,000 (and, in fact, for many more numbers than this.)

Given an input n, it is possible to determine the number of numbers printed (including the 1). For a given n this is called the cycle-length of n. In the example above, the cycle length of 22 is 16.

For any two numbers i and j you are to determine the maximum cycle length over all numbers between i and j.

The Input

The input will consist of a series of pairs of integers i and j, one pair of integers per line. All integers will be less than 1,000,000 and greater than 0.

You should process all pairs of integers and for each pair determine the maximum cycle length over all integers between and including i and j.

You can assume that no operation overflows a 32-bit integer.

The Output

For each pair of input integers i and j you should output i, j, and the maximum cycle length for integers between and including i and j. These three numbers should be separated by at least one space with all three numbers on one line and with one line of output for each line of input. The integers i and j must appear in the output in the same order in which they appeared in the input and should be followed by the maximum cycle length (on the same line).

Sample Input

1 10
100 200
201 210
900 1000

Sample Output

1 10 20
100 200 125
201 210 89
900 1000 174


介绍:

这题说的是奇偶归一猜想(英语:Collatz conjecture),又称为3n+1猜想、冰雹猜想、角谷猜想、哈塞猜想、乌拉姆猜想或叙拉古猜想,是指对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1。

 f(n) = \begin{cases} n/2 &\mbox{if } n \equiv 0 \\ 3n+1 & \mbox{if } n\equiv 1 \end{cases} \pmod{2}.
参考《数论中未解决的问题》P275:


(一种“可视化”表示)

另:论文"The 3x+1 problem and its generalizations"[Lag85]中提到,就连大名鼎鼎的匈牙利天才数学家保罗·厄多斯也说道:“Mathematics is not yet ready for such problems.”(数学还没准备好应付这类问题)

更多细节见《数论概论》P20


注意:

1. 由于题目中说“You can assume that no operation overflows a 32-bit integer.”所以用int可过这题。

2. i可能大于j,一开始读题的时候就yy会不会出给这么变态的数据,没想到真的这样。。

3. 使用一个数组保存算过的数据,可减少很多运行时间。

复杂度:Unknown


完整代码:

/*UVa: 0.045s*/
/*HDU: 0ms,2184KB*/
/*POJ: 16ms,2160KB*/

#include<bits/stdc++.h>
using namespace std;
const int maxs = 1000000;

int cache[maxs];///记录已经算过的值

/// 对更大的maxs可能由于递归过深导致出现栈溢出的情况
int counter(int num)
{
	if (num == 1) return 1;
	if (num & 1) num += (num << 1) + 1;
	else num >>= 1;
	if (num < maxs)
	{
		if (!cache[num]) cache[num] = counter(num);
		return 1 + cache[num];
	}
	return 1 + counter(num);
}

int main()
{
	int a, b, mx, i;
	while (~scanf("%d%d", &a, &b))
	{
		printf("%d %d ", a, b);
		if (a > b) swap(a, b);
		mx = 1;
		for (i = a; i <= b; ++i) mx = max(mx, counter(i));
		printf("%d\n", mx);
	}
	return 0;
}

哈工大软件学院算法分析与设计考试资料 哈工大软院07级 考试复习时 搜集的往届的考试复习题~~ 希望对软院的学弟学妹们有所帮助~~ 立即下载

相关推荐

算法设计与分析课后习题

相当赞,大家快来下吧,很好的,全面的介绍了算法课后习题

冰雹(3n+1)猜想一个不太成熟的小思路

【问题描述】 下面的算法段用于确定n的初始值。试分析该算法段所需计算时间的上界和下界。 ———————————————————— while(n&amp;gt;1) if(odd(n)) n=3*n+1; else n=n/2; ———————————————————— 【解题思路】 考虑到整个代码段中的主体是一个while循环并且循环中只有一个if-else语句。我们假定这里n的值都大于1,于是我们以这...

Ding_0110M的博客 4221

透传产品上报AEP平台数据流程

1. 什么是数据透传 数据透传:指的是在通讯中不管传输的业务内容如何,只负责将传输的内容由源地址传输到目的地址,而不对业务数据内容做任何改变。 这篇文章描述了如何将一台NB设备通过透传方式将数据传输到AEP平台,再通过数据订阅的方式获取到这些数据。 2. 步骤 2.1 设备在AEP平台创建 AEP:https://dm.ctwing.cn/ 新建产品 添加设备 根据模组的15位IMEI添加设备 开启内网穿透 具体可参照我的这篇博客:内网穿透-如何进行本地数据调试 设置数据推送

qq_42265394的博客 2297

Basic-时间复杂度和空间复杂度

算法分析 同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。 1、时间复杂度(1)时间频度一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花...

weixin_33963594的博客 184

手把手教你给H3C MSR路由器配置4G/5G上网(保姆级图文教程)

本文提供H3C MSR路由器配置4G/5G上网的保姆级图文教程,涵盖硬件准备、运营商适配、命令行配置、多运营商策略优化及信号故障排查等全流程。通过实测数据和典型场景分析,帮助用户快速实现4G/5G模块的部署与优化,提升网络稳定性和业务连续性。

weixin_28745067的博客 440

EDA虚拟机分享2020版本(Synopsys2020)

EDA虚拟机分享

亦安的数字小站 9192

1,面试分析题

//2 面试题 @autoreleasepool { Person *per1 = [[Person alloc] init]; NSString *per = [[NSString alloc]init]; [per retain]; [per retain]; per = @"aa"; pe

huhuahua6的专栏 583

Mac新手必看:nvm安装全攻略(含常见错误解决方案)

本文为Mac开发者提供nvm安装与使用全攻略,涵盖环境准备、安装步骤、Shell配置优化及常见错误解决方案。详细讲解如何利用nvm管理多Node版本,提升开发效率,特别针对国内用户提供网络问题解决技巧,是Mac新手必备的Node版本管理指南。

weixin_28839699的博客 1612

算法设计与分析 作业一

正常数n≥n0时,有c1 g(n)≤f(n)≤c2 g(n)

swe_t_的博客 1045

红外与可见光融合避坑指南:LLVIP数据集实测6大算法效果对比

本文基于专为弱光视觉设计的LLVIP数据集,对GTF、DenseFuse、FusionGAN、IFCNN等6种主流红外与可见光图像融合算法进行了深度实测与对比。通过客观指标与可视化分析,揭示了算法在极端弱光下易出现特征丢失的共性问题,并探讨了融合图像对下游目标检测任务的实际增益,为工程选型与算法调优提供了实用指南。

weixin_29092031的博客 440

PADS Logic VX2.5元件绘制全流程:从零开始创建自定义元件库

本文详细介绍了在PADS Logic VX2.5中从零开始创建自定义元件库的全流程。内容包括理解PADS独特的四库分立结构、绘制原理图符号(CAE封装)、关联PCB封装、创建元件类型以及最终的调用验证。掌握元件绘制技能能从根本上提升设计效率、确保设计规范统一,并从源头杜绝原理图与PCB之间的关联错误,是硬件工程师必备的核心能力。

oo7890的博客 442

算法分析与设计-算法分析题-第1章-题目答案与解析

第1章 算法概述 算法分析题 题目+答案解析 算法分析题 笔记参考:https://blog.youkuaiyun.com/qq_50737715/article/details/123441882 1-1 求下列函数的渐近表达式 (1)3n2+10n3n^2+10n3n2+10n ∵O(n)<O(n2)\because \Omicron(n)<\Omicron(n^2)∵O(n)<O(n2) ∵3n2+10n=O(n2)\because 3n^2+10n=\Omicron(n^2)∵3n2+10n=

qq_50737715的博客 5740

麒麟V10 x86_64系统下Qt 5.12.7安装全攻略(附常见报错解决方案)

本文详细介绍了在麒麟V10 x86_64系统上安装Qt 5.12.7的完整流程,包括在线和离线两种安装方案,并提供了常见报错的解决方案。从环境准备到项目配置优化,再到高级调试技巧,全面覆盖Qt开发在国产操作系统上的实践要点,帮助开发者高效搭建开发环境。

weixin_29294395的博客 509

几个题目计划

<br />      1.创业担保投资网络平台<br />      目前各类创业担保与投资公司越来越多,为中小企业发展提供了良好的资金保障。本网络平台计划做成一个行业综合性资讯平台,汇聚地方创业投资公司信息,提供行业动态、资讯信息,银企沟通桥梁,公司网站链接等。<br />      2.大学生阅读行为统计与聚类分析<br />      根据每年图书馆资料借阅信息,进行汇总统计和聚类分析,为分析学生阅读兴趣和图书采购提供决策支持。<br />      3.二维(或一维)条形码制作、识别与打印输出系统

从早忙到晚的闲人 984

TPAMI 2025新作LRFormer复现笔记:我的Windows 11 + RTX 4090配置全流程

本文详细记录了在Windows 11系统下使用RTX 4090显卡复现TPAMI 2025顶会论文LRTransformer的完整流程,包括硬件配置、系统优化、Python环境搭建及模型训练中的常见问题解决方案。特别针对Windows平台特有的路径管理、CUDA版本冲突和显存优化等关键技术细节提供了实用指南,帮助开发者高效完成环境搭建和模型训练。

weixin_29094301的博客 413

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

算法题目

1. 写一个程序, 要求功能:求出用1,2,5这三个数不同个数组合的和为100的组合个数。如:100个1是一个组合,5个1加19个5是一个组合。。。。 请用C++语言写2. n个数,判断其中是否有相同的数3. 动态规划:求矩阵链乘和最长公共子序列4. 非递归后序遍历:第一次访问节点时将其入栈,并将其标志设置为0,第二次访问节点时将其标志设置为1,第三次访问该几点时将其出栈5. 找出

zhongteng的专栏 474

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

奇偶归一猜想(多组数据)——又称为3n+1猜想、冰雹猜想、角谷猜想

输入两个正整数a和b,输出二者之间所有数的奇偶归一猜想的验证过程。对于任意一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1。 例如整数7,它的变换过程为:22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1。

m0_64782700的博客 3142

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

奇偶归一猜想

奇偶归一猜想 奇偶归一猜想,又称为3n+1猜想,冰雹猜想,克拉茲问题,是指对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1。 这里用python写了一个奇偶归一猜想程序。 x = [] def hailstone(n): if n == 1: x.append(1) return x ...

weixin_30487701的博客 1968

JAVAEE 复习猜想

JAVAEE 复习猜想一、选择题二、简答题五、程序设计题 一、选择题 1.404资源不存在 500服务器错误 2.page一个页面 request请求产生后,响应完成前 session浏览器 application web服务器自创建至结束 3.spring bean的作用域(scope属性) singleton prototype request session globalsession 4....

qq_39699765的博客 534

市场短期博弈的猜想

市场出现了昨天设定的第二种情景,如果你昨天选择支撑位现货动态进攻今天应该会有盈利。但是比特拉升让市场进入一种分歧和混乱,因为大家害怕走双顶。 而从市场上很多主流币种来看因为今天偏向于比特币带来的同步反弹,所以在量能上并没有太多的高度。如果基于昨天设定的第二种剧本的话,从我的想法上来讲,应该还远远不够能够支撑出货的时候。如果市场没有足够的情绪来支撑的话,那么只能用做空强砸的方式来做一切,...

ai_lulu的博客 357

Python 2.7 | “奇偶猜想”三步归一

“奇偶归一”,又称为3n+1猜想。 对于一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2。如此循环,最终都能够得到1。 代码: n=input() t=0 while n!=1: t=t+1 if n%2==0: n=n/2 else: n=3*n+1 print t 注:经济学类专业,学的专业课上的课后题,方法较为基本与幼稚,分享出来仅供参考。 ...

fuzhi123456的博客 2414

uva 275 Expanding Fractions

题目:给你一个分数的分子和分母,求出他的循环节。 Sample Input 3 7 345 800 112 990 53 122 0 0 Sample Output .428571 The last 6 digits repeat forever. .43125 This expansion terminates. .113 The last

脚踏实地 688

HDU 2048 神、上帝以及老天爷 (递推&错排概率)

思路: 1. N张字条的所有可能排列自然是N!(分母)。 现在的问题就是求N张字条的错排数f(N)(分子)。 首先我们考虑,如果前面N-1个人拿的都不是自己的票,即前N-1个人满足错排,现在又来了一个人,他手里拿的是自己的票。只要他把自己的票与其他N-1个人中的任意一个交换,就可以满足N个人的错排。这时有(N-1)*f(N-1)种方法。 Besides,我们考虑,如果前N-1个人不满足错排,而第N个人把自己的票与其中一个人交换后恰好满足错排。 这种情况发生在原先N-1人中,N-2个人满足错排,有且仅有一个人

AC,∑ndless 3640

HDU 2973 / UVa 1434 / CERC 2008 YAPTCHA (威尔逊定理及其逆定理)

http://acm.hdu.edu.cn/showproblem.php?pid=2973 思路: 当n是合数时,((n-1)!+1)/n不为整数,所以在题目的和式中该部分为0;n是质数时就为1了。 所以筛一遍素数就出符合3k+7类型的素数即可。 额外说一句,当a,b互素时,形如an+b的素数有无穷个。(wiki:Dirichlet's theorem o

AC,∑ndless 3361
上一篇: UVa 10006 Carmichael Numbers(数论&卡米歇尔数&考塞特判别法)
下一篇: HDU 2066 一个人的旅行(最短路&Dijkstra)
synapse7
博客等级 码龄14年 432粉丝 701原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值