- 注册时间
- 2017-12-7
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 3243
- 在线时间
- 小时
|
楼主 |
发表于 2018-6-27 23:00:22
|
显示全部楼层
本帖最后由 .·.·. 于 2018-6-28 03:13 编辑
是的,以及
问题甚至可以简化成
每一个m_i都是某一个质数的整数次幂
反正中国剩余定理就是干这个活儿的……
以及,暂时的发现是,最终结果(在随机意义下)可能远比我之前想象得要小。
借助R,python以及pari/gp,简单实验了一下
python写的pari/gp的代码生成程序(为了防止排版问题我把空格替换成了!&^%!,只要替换回去就可以送python3执行了):
- str="searched(a,b,c,d,e,f)=vecmin(["
- modlist=[3,5,7,11,13,17]
- for!&^%!i!&^%!in!&^%!range(1,64):
- !&^%!!&^%!if!&^%!bin(i).count('1')==1:
- !&^%!!&^%!!&^%!!&^%!!&^%!j=len(bin(i))-bin(i).index('1')-1
- !&^%!!&^%!!&^%!!&^%!!&^%!str+="lift(%c)/%d,"%(j+97,modlist[j])
- !&^%!!&^%!!&^%!!&^%!!&^%!print([i,j,k])
- !&^%!!&^%!else:
- !&^%!!&^%!!&^%!g=[j!&^%!for!&^%!j!&^%!in!&^%!bin(i)[2:]];g.reverse()
- !&^%!!&^%!!&^%!s="lift(chinese(["
- !&^%!!&^%!!&^%!mul=1
- !&^%!!&^%!!&^%!for!&^%!j,k!&^%!in!&^%!enumerate(g):
- !&^%!!&^%!!&^%!!&^%!if!&^%!k=='1':
- !&^%!!&^%!!&^%!!&^%!!&^%!s+="%c,"%(j+97)
- !&^%!!&^%!!&^%!!&^%!!&^%!mul*=modlist[j]
- !&^%!!&^%!!&^%!str+=s[:-1]+"]))/%d,"%mul
- print(str[:-1]+"])")
复制代码 这是机器生成的难看的gp代码:
- searched(a,b,c,d,e,f)=vecmin([lift(a)/3,lift(b)/5,lift(chinese([a,b]))/15,lift(c)/7,lift(chinese([a,c]))/21,lift(chinese([b,c]))/35,lift(chinese([a,b,c]))/105,lift(d)/11,lift(chinese([a,d]))/33,lift(chinese([b,d]))/55,lift(chinese([a,b,d]))/165,lift(chinese([c,d]))/77,lift(chinese([a,c,d]))/231,lift(chinese([b,c,d]))/385,lift(chinese([a,b,c,d]))/1155,lift(e)/13,lift(chinese([a,e]))/39,lift(chinese([b,e]))/65,lift(chinese([a,b,e]))/195,lift(chinese([c,e]))/91,lift(chinese([a,c,e]))/273,lift(chinese([b,c,e]))/455,lift(chinese([a,b,c,e]))/1365,lift(chinese([d,e]))/143,lift(chinese([a,d,e]))/429,lift(chinese([b,d,e]))/715,lift(chinese([a,b,d,e]))/2145,lift(chinese([c,d,e]))/1001,lift(chinese([a,c,d,e]))/3003,lift(chinese([b,c,d,e]))/5005,lift(chinese([a,b,c,d,e]))/15015,lift(f)/17,lift(chinese([a,f]))/51,lift(chinese([b,f]))/85,lift(chinese([a,b,f]))/255,lift(chinese([c,f]))/119,lift(chinese([a,c,f]))/357,lift(chinese([b,c,f]))/595,lift(chinese([a,b,c,f]))/1785,lift(chinese([d,f]))/187,lift(chinese([a,d,f]))/561,lift(chinese([b,d,f]))/935,lift(chinese([a,b,d,f]))/2805,lift(chinese([c,d,f]))/1309,lift(chinese([a,c,d,f]))/3927,lift(chinese([b,c,d,f]))/6545,lift(chinese([a,b,c,d,f]))/19635,lift(chinese([e,f]))/221,lift(chinese([a,e,f]))/663,lift(chinese([b,e,f]))/1105,lift(chinese([a,b,e,f]))/3315,lift(chinese([c,e,f]))/1547,lift(chinese([a,c,e,f]))/4641,lift(chinese([b,c,e,f]))/7735,lift(chinese([a,b,c,e,f]))/23205,lift(chinese([d,e,f]))/2431,lift(chinese([a,d,e,f]))/7293,lift(chinese([b,d,e,f]))/12155,lift(chinese([a,b,d,e,f]))/36465,lift(chinese([c,d,e,f]))/17017,lift(chinese([a,c,d,e,f]))/51051,lift(chinese([b,c,d,e,f]))/85085,lift(chinese([a,b,c,d,e,f]))/255255])
- c=0;for(i3=1,2,for(i5=1,4,for(i7=1,6,for(i11=1,10,for(i13=1,12,for(i17=1,16,c++))))));c
- a=Col(0,92160);
- cc=0;for(i3=1,2,for(i5=1,4,for(i7=1,6,for(i11=1,10,for(i13=1,12,for(i17=1,16,cc++;a[cc]=(searched(Mod(i3,3),Mod(i5,5),Mod(i7,7),Mod(i11,11),Mod(i13,13),Mod(i17,17)))))))))
- a
- \w /mnt/b/output.txt
复制代码 这里是R的绘图部分结果
- vec=source("B:\\output.txt")#这里更改了output使得其符合R的语法,然而仍然读了15秒……
- runif_count=48;len=length(vec);g=apply(matrix(runif(len*runif_count),len),1,min);plot(sort(vec),sort(g),type='l',main="g=apply(matrix(runif(len*runif_count=48),len),1,min)");abline(0,1,col=2)
复制代码 对6个质数(3,5,7,11,13,17)的测试结果表明,我们的目标值大约跟$U_(48,1)$的分布差不多,这里$U_(j,i)$代表的是,$j$个服从均匀分布$U(0,1)$的随机变量之中第$i$小的随机变量
当然这里只是头部如此,尾巴上面会有偏差,毕竟我们选择的都是小质数,如果质数大一些,或许这个出现在尾部的偏差理应会减小……
所以感觉是,最优值就在那里,但我们就是找不到……
|
|