• 【数论】莫比乌斯函数+中国剩余定理


     恰好在周二仔细看了中国剩余定理。。可惜还是没能在比赛的时候做出来。。。:-(

    codeforce 2018-2019icpc final C 

    题目大意是:给一个长度为200的01串,代表的是在[1,1e9]范围内连续200个数的莫比乌斯函数值,求出是否真的是存在这么样子的200个值,不存在输出-1,存在则输出这个长度为200的区间的最小起始位置。

    我的思路是:

    因为 |μ( )| 在 存在某个质数2次幂以上的因子时为0 ,然后 又有这么一个结论:x在区间[a,a+x]必出现一次它的倍数。

    而,在200以内有质数2次幂的数是:4,9,25,49,121,169 这6个,(只考虑2次幂,因为之后要考虑的是这些数的倍数,而一个数的高次幂一定可以用它的倍数表示 ),

    然后,这些数值包括它们的倍数 的μ一定为0,所以当x等于质数^2的倍数时,x每隔x必定为0,可以在[1,200]这个区间的起始区间去check,check是找出可能是{4,9,25,49,121,169}这些数的位置,只要在整个区间内,逢其倍数必为0的数就可能是它的倍数。然后就找出所有可能的结果。

    我当时随便想想,然后随便想想又想起了两天前看到的剩余定理,意外眼熟,然后就有了:设这些数为mi,起始位置,也就是ans为x,找到这些数的一组起始位置时,就可以确定一组值,我在这设为di,di=x%mi;

    然后 中国剩余定理有:

      对于一组方程: x=di(mod mi) 

      在m1,m2,m3,....,mi,...,mk  两两互质的条件下,设N=m1*m2*m3*....*mi*...*mk ,

      在模N的条件下有唯一解。

    然后我就根据这组东西去求这个解,然后再反过来check,看看两组是否一样。

    反过来check是因为,那组d的值是根据0确定的但不根据1,所以0符合不一定1符合,可能得到的新值0更多。一开始就因为这个wa了。

    然后,会超时。因为,全0的话。。很难搞。

    然后我就自己写个随机数打表,在有限样例内发现连续的0不超过6个,且1的个数为118到126个,因此我选择起始check时,连续0超过10个 或者 1的个数不再115到130范围内 直接判为无解。

    然后其他按正常做法就行了。

  • 相关阅读:
    网络与系统安全第四次作业
    2018-2019-1 20189203《linux内核原理与分析》第六周作业
    《网络攻防实践》第五周作业
    《网络攻防实践》第四周作业
    《网络攻防实践》第三周作业
    《网络攻防实践》第二周作业
    《网络攻防实践》第一周作业
    《Linux内核原理与分析》第九周作业
    《Linux内核原理与分析》第八周作业
    《Linux内核原理与分析》第七周作业
  • 原文地址:https://www.cnblogs.com/kkkek/p/11954874.html
Copyright © 2020-2023  润新知