VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1326|回复: 7

求一个数学算法,用于根据给定值生成尽可能不重复的数值序列

[复制链接]

3

主题

10

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-2-7 16:00:01 | 显示全部楼层 |阅读模式
假设有输入序列,1,2,3,4,5,6,7,8,9,10...n
要求输出一个类似随机数的序列,没有任何规律
比方说,234,78,123,87,32,...
输出的序列可以重复,但要求重复几率尽可能低,最好不要大于5%

不要使用现成的随机函数如rand()
回复

使用道具 举报

0

主题

22

帖子

18.00

积分

新手上路

Rank: 1

积分
18.00
发表于 2020-3-30 08:30:01 | 显示全部楼层
不明白楼主说的输入1到n,是做什么用的
回复

使用道具 举报

3

主题

10

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
 楼主| 发表于 2020-3-30 19:15:01 | 显示全部楼层
看看这个:
1,2,3,4,5,6,7,8,9,10
对应的输出是:
6,15,28,45,66,91,120,153,190,231

看看有什么规律么?
回复

使用道具 举报

3

主题

10

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
 楼主| 发表于 2020-3-31 10:00:01 | 显示全部楼层
其实也没什么大用。哈哈。
我现在想用在共享软件序列号的发放里面。

就是做一下变换,让人不能根据若干输入和结果,猜测算法。

回复

使用道具 举报

0

主题

22

帖子

18.00

积分

新手上路

Rank: 1

积分
18.00
发表于 2020-4-2 01:15:01 | 显示全部楼层
An = 2*n*n+3*n+1

如果是少量的话,倒是可以用一下系统时间的最后3位(xxx微秒),或者随便从哪里读一段二进制数据来(硬盘,内存,文件...稍微有些规律应该也没关系),处理一下就凑合着用了
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-4-6 10:15:01 | 显示全部楼层
md5转换一下
回复

使用道具 举报

3

主题

10

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
 楼主| 发表于 2020-4-13 20:00:01 | 显示全部楼层
stoneboy4000
你怎么推出来的?
回复

使用道具 举报

0

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-5-13 21:15:01 | 显示全部楼层
先看看你的序列为何如此脆弱

f(1) = 6, f(2) = 15, f(3) = 28, f(4) = 45 ....

==> f(2)-f(1) = 9; f(3)-f(2) = 13 ; f(4)-f(3) = 17; f(5)-f(4) = 21 ...
=> 13-9 = 4, 17-13 = 4, 21-17 = 4 .... 显然是一个等差数列

=> f(n)-f(n-1) = 4(n-1)+5 (n>1). 由此递推关系,就可以得出结果了。

推倒如下:
f(2)- f(1) = 4*1+5 ;
f(3)- f(2) = 4*2+5;
f(4)- f(3) = 4*3+5;
...
f(n)-f(n-1) = 4*(n-1)+5;
将上面的各式相加 => f(n)-f(1) = 2n*n +3n-5, 注意到 f(1) = 6.
所以 f(n) = 2n*n+3n+1

就你的需求而言,你需要一个非线性的伪随机书发生器。一个简单的办法是自己定义一个大的表格,里面的数据是预先定义,随即并且是非线性的(发挥自己的想象:))。
然后用rand(n),(n=1,2,...)产生一个数,用这个数的偶数位确定行,奇数位确定列,然后取出表格中的值即可。

这个办法的关键是这个表格的内容必须是安全的,如果别人反汇编,这个方法是徒劳的...

如果你对安全需要的很高,那么你需要的是密码学安全的伪随机数发生器,你可以上网搜索 PRNG,有不少现成的实现(大部分是国外的密码学专家写的),可以保证国家安全局拿你的程序也没办法。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

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