zoukankan      html  css  js  c++  java
  • Nimber系列略学习笔记

    Nimber系列略学习笔记

    前言

    ( ext{Nim+Number=Nimber})

    基于我们熟悉的博弈问题( ext{Nim})问题,我们定义了多( ext{Nim})问题的和,即( ext{Nim})

    我们知道( ext{Nim})和就是异或运算,为了构成一个更完整的( ext{Number})域,又引入一种新的运算

    ( ext{Nim})

    [ ]

    [ ]

    定义

    对于在([0,2^{2^m}))上的整数,定义两种( ext{Nim})运算,构成一个封闭的域

    1.( ext{Nim})(oplus)(displaystyle xoplus y= ext{mex}{{aoplus y|a<x}cup{xoplus b|b<y}})

    其中对于非负整数集合的( ext{mex})运算即求不在集合中的最小非负整数

    也就是( ext{Nim})游戏的"和"

    [ ]

    2.( ext{Nim})(otimes)

    需要先介绍高维( ext{Nim})游戏

    对于一维情况:

    数轴上整点处有若干黑点(x_i),每次操作可以选择一个黑点(x_i),找到(a<x_i)

    将线段([a,x_i])两端点的黑白翻转

    对于二维情况:

    平面上整点处有若干黑点((x_i,y_i)),每次选择一个黑点((x_i,y_i)),找到另一个点((a,b),a<x_i,b<y_i)

    将矩形((a,b)-(x_i,y_i))四个顶点的颜色翻转

    对于三维情况:

    空间上整点处有若干黑点((x_i,y_i,z_i)),每次选择一个黑点((x_i,y_i,z_i)),找到另一个点((a,b,c),a<x_i,b<y_i,c<z_i)

    将长方体((a,b,c)-(x_i,y_i,z_i))八个顶点的颜色翻转

    (ldots)

    ( ext{Nim})积是高维( ext{Nim})游戏的降维操作,显然各个维度之间无序,每个黑点之间可以通过( ext{Nim})和相加

    由此定义在二维( ext{Nim})游戏上的( ext{Nim})积运算

    (xotimes y= ext{mex}{(aotimes y)oplus (xotimes b)oplus(aotimes b)|a<x,b<y})

    相较于( ext{Nim})和,( ext{Nim})积运算十分复杂,需要若干性质简化运算

    1.基础运算律

    (xotimes 1=x)

    (xotimes y=yotimes x)

    ((xotimes y)otimes z=xotimes (yotimes z))

    2.(2^{2^n}otimes 2^{2^m}=left{egin{aligned}2^{2^n+2^m} && n e m\ 3cdot 2^{2^n-1} && n=mend{aligned} ight.)

    3.(2^{2^n}otimes x=2^{2^n} imes x (x<2^{2^n}))

    对于(x,yin [0,2^{2^m})),利用性质3,用减半的方法优化运算,令(n=2^{m-1})

    (x=acdot 2^n+b,y=ccdot 2^n+d,a,b,c,din[0,2^n))

    (xotimes y=(aotimes 2^noplus b)otimes (cotimes 2^noplus d))

    (=((aotimes c)otimes (3cdot 2^{n-1}))oplus (2^ncdot ((aotimes d)oplus (botimes c)) ) oplus (botimes d))

    (=((aotimes c)otimes (2^{n}oplus 2^{n-1}))oplus (2^ncdot ((aotimes d)oplus (botimes c)) ) oplus (botimes d))

    (=((aotimes c)otimes 2^{n-1})oplus (2^ncdot ((aotimes c)oplus (aotimes d)oplus (botimes c)) ) oplus (botimes d))

    (=((aotimes c)otimes 2^{n-1})oplus (2^ncdot ((aoplus b)otimes (coplus d)oplus (botimes d))) oplus (botimes d))

    由此进行暴力递归需要依次计算(aotimes c,(aotimes c)otimes 2^{n-1},botimes d,(aoplus b)otimes (coplus d))

    复杂度为(O(4^{m})),由于(2^{n-1})

    对于(2^{32})以内的运算,即(m=5),看起来已经可以接受?

    [ ]

    [ ]

    应用原根的优化

    ( ext{Nimber})域内是存在原根的,([0,2^{16}))域内最小的原根是(258)

    如果预处理出([0,2^{16}))以内所有数的原根指标和乘法表,即可(O(1))查询([0,2^{16}))任意数的( ext{Nimber})

    由此也可以仅通过一次递归计算([0,2^{32}))域内的( ext{Nimber})

    [ ]

    [ ]

    更多运算

    对于([0,2^{2^m}))域内的( ext{Nimber}),由性质(x^{2^m}=x)导出的运算有

    (displaystyle frac{1}{x}=x^{2^m-2})

    (sqrt x=x^{2^{m-1}})

  • 相关阅读:
    Day12——提权学习之第三方软件Radmin提权
    Day11——提权学习之第三方软件VNC提权
    Day10——提权学习之第三方软件FlashFXP及pcAnywhere提权
    Day9——提权学习之第三方软件FileZilla提权
    Day8——提权学习之第三方软件G6-FTP提权
    Day7——提权学习之第三方软件serv-u提权
    Day6——提权学习之Oracle数据库提权学习总结
    Memcached 未授权访问漏洞 CVE-2013-7239
    恭喜tes获得夏季赛冠军
    有关xss的小日记
  • 原文地址:https://www.cnblogs.com/chasedeath/p/14446796.html
Copyright © 2011-2022 走看看