作者hidog (.....)
看板Engineer
标题写了一个mapping
时间Tue Jun 23 16:00:45 2026
义务教育应该上过,function满足一对一映成,就会存在反函数
(虽然一般人已经忘了这句话了...)
下个问题,怎麽设计一个[0,N]区间的一对一映成函数呢
自己给定质数prime, prime < 2*N
int64_t f(int64_t input, int64_t full_size, int prime )
{
int64_t size = full_size%prime == 0 ? full_size-1 :
(full_size/prime)*prime - 1;
if( input >= size )
return input;
int64_t result = 0;
int64_t offset = size/prime;
int64_t n;
for( n = 0; n < prime; n++ )
{
if( offset*n + n <= input && input <= offset*(n + 1) + n)
{
result = (input - offset*n - n)*prime +n;
break;
}
}
return result;
}
int64_t g( int64_t input, int64_t full_size, int prime )
{
int64_t size = full_size%prime == 0 ? full_size-1 :
(full_size/prime)*prime - 1;
if( input >= size )
return input;
int64_t quotient = input/prime;
int64_t remainder = input%prime;
int64_t offset = size/prime;
int64_t n;
int64_t result = offset*remainder + quotient + remainder;
return result;
}
其中,g是f的反函数,g(f(x)) = x
至於这东西能干嘛...自己是拿去把一个档案弄乱,可以想成是某种形式的加密
或是未来小孩国高中後给他当脑筋急转弯或是当科展题材(?)
我的年代,义务教育都着重在解数学题目
但我觉得开放性的设计数学会比较有趣. (包含程式设计)
工程师忙累了,今天股票被套牢,觉得很闷跑来写废文QQ
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.241.148.110 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Engineer/M.1782201647.A.898.html
1F:→ nowitzkixd: 我满手发哥 今天加入国巨跟智邦 明天再跌就加码台积 06/23 17:15
2F:→ nowitzkixd: 继续摊国巨 06/23 17:15
3F:→ hidog: 羡慕满手发哥,这一波准备财富自由了吧 06/23 17:58
4F:→ nowitzkixd: 昨天发哥没什麽涨 QQ 06/23 18:04
5F:→ hidog: QQ 06/23 18:23
6F:推 marra: 我手上没有台股,似乎有一点点ETF 06/23 21:09