作者ggg12345 (ggg)
站内Programming
标题Re: [问题] 请问要如何用C++ 设定f(a*b)=f(a)*f(b)?
时间Mon Aug 10 11:32:01 2009
※ 引述《aleyukimo (aleyu)》之铭言:
: 最近在算一个题目
: 例如
: f(a)=b
: f(b)=c
: f(c)=d
: f(d)=e
: f(e)=a*b
: f(a*b)=f(a)*f(b)=b*c
: ......
: 遇到b*b*c=c
: (a*b*c*d)*(b*d*f)=a*c*f
: ..........
: 这里的abcde不一定是实数,他只是个符号
: 例1
: a=10000
: b=01000
: c=00100
: d=00010
: e=00001
: ac=a*c=10100
: cde=00111
: (ac)*(cde)=ade=10011
: 例2
: 这里有5个数(a,b,c,d,e) 可以看成内积
: a=(-1,1,1,1,1)
: b=(1,-1,1,1,1)...
: e=(1,1,1,1,-1)
: 此时ac=a与c的内积=(-1,1,-1,1,1)
: 但加法不行...
: 要求满足f^n(a)=a的n的最小值
: n是指合成函数
: 如f^2(a)=f(f(a))=a
: f^3(a)=f(f(f(a)))=a
: 因为要有很多了例子要跑 如f(e)=a*c*d
: 或者不只有a b c d e5个数 也有6个数....
: 不知道要怎麽用C++去设定函数?
: 麻烦各位给个头绪
: 我已经想了很久 好几天睡不太好
: 谢谢
手推导的结果是:
vector_length min_n
2 3
3 7
4 15
5 21
6 63
f^vector_lenth(a) = a * f(a)
最短循环数 min_n 显然跟 (2^vector_length - 1 ) 有关, (0,0...,0)
无法循环
f 是 shift & round-back2
* 是 vector bit XOR
好玩, 可以介绍用途吗 ?
※ 编辑: ggg12345 来自: 140.115.4.12 (08/10 11:44)