找回密码
 新注册用户
搜索
查看: 5840|回复: 5

如何将三个自然数变成两个自然数哆

[复制链接]
发表于 2005-4-1 14:51:33 | 显示全部楼层 |阅读模式
各位大哥大姐大爷们帮帮小弟哆
如何将三个自然数变成两个自然数哆 而且又可以由已知的这两面个自然数还原成那三个自然数哆
回复

使用道具 举报

发表于 2005-4-1 16:56:35 | 显示全部楼层
楼上的意思可以理解为三个未知数,列两个方程,求解这三个未知数。
呵呵,像是愚人节的笑话........
回复

使用道具 举报

发表于 2005-4-1 17:19:51 | 显示全部楼层
我想到解决方法了,可以把有限个自然数变成两个自然数,并能还原。
吃过晚饭后我再把方法写出来。

[ Last edited by air on 2005-4-1 at 17:50 ]
回复

使用道具 举报

发表于 2005-4-1 18:18:24 | 显示全部楼层
有n个自然数: A1, A2, ..., An
令 B = max(A1, A2, ..., An),即这n个自然数中最大的一个,
任取 C > B,可取 C = B + 1,也可以取 C 为 10 的整次的幂,
令 D = A1 * C^0 + A2 * C^1 + ... + An * C^(n-1)
则 C, D 为所求,可以表示 A1, A2, ..., An

至于还原方法,就不用我说了吧?
(还原时还可以知道原来n个数的顺序)

例如:有三个数:232221, 1000000, 987
我们可以取C为1000001,这是C的最小取值。
但是取 C=10000000 对十进制运算更直观,
则 D = 98710000000232221。
回复

使用道具 举报

发表于 2005-4-1 19:05:18 | 显示全部楼层
你是不是陈景润?!
回复

使用道具 举报

发表于 2005-4-3 16:44:26 | 显示全部楼层
我这个算法还不够健壮,在一些古怪的输入下会失败。

1、当 n = 0 时,B无定义。这时我们可取 C = 0,D任取。

2、算法无法区分以0结尾的输入序列,如 { 2, 5, 0, 0 } 和 { 2, 5 }。

这个问题可以通过改进算法解决:
任取 C > B + 1,
令 D = (A1 + 1) * C^0 + (A2 + 1) * C^1 + ... + (An + 1) * C^(n-1)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 新注册用户

本版积分规则

论坛官方淘宝店开业啦~
欢迎大家多多支持基金会~

Archiver|手机版|小黑屋|中国分布式计算总站 ( 沪ICP备05042587号 )

GMT+8, 2025-5-4 19:36

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表