题目:http://community.topcoder.com/stat?c=problem_statement&pm=12083

这道题还是挺耐想的(至少对我来说是这样)。开始时我只会60%的算法,在借鉴了巨神zhx的代码并查阅了官方题解后才终于懂了点了。

两两互质的情形

首先,考虑简化的情形:若模板i的长度为li,我们加上限制,即所有模板的长度两两互质。

假设当前位置x对应第i个模板的位置为ai,当且仅当,而li是两两互质的,由中国剩余定理,x在范围内有唯一解。这样,这个问题就被秒掉了。

一般情形

下面考虑一般情形。

假设有两个模板i和j,,我们可以考虑将正整数集合中的元素按照模k的余数分成k个子集,设b属于集合Mt当且仅当b mod k = t。那么,如果x属于集合Mt,则有ai mod k = aj mod k = x mod k = t,因为ai = x mod li,而k | li。这样,我们实际上只需要考虑模k相同的(ai, aj),这相当于将模板i拆成了li / k个子模板,模板j拆成了lj / k个子模板,而gcd(li / k, lj / k) = 1,所以我们可以用前面的互质情形解决。

最终的解法

因为50以内的合数x必须满足,其中P为素数集合,所以我们可以考虑将小于sqrt(50)的素数和不小于sqrt(50)的素数分开考虑。小于sqrt(50)的素数只有2,3,5,7四个,而32 * 27 * 25 * 49很小,所以我们可以直接将li为2,3,5,7几个素数乘积的模板i扩展合并为一个新的长度为32 * 27 * 25 * 49的新模板。然而,除开这些模板,另外的模板和这个新模板的长度并不一定互质,如长度为22的模板。但是,我们注意到,对于其他在50以内的合数,即存在大于sqrt(50)的素因子的合数,它们含有的小于sqrt(50)的素因子不会太多,因为11 * 5 > 50,而11仅能和一个3相乘,或者和两个2相乘,再多一点就爆出50了。而且注意到,对于这种合数,大于sqrt(50)的素因子有且仅有一个,因为sqrt(50) * sqrt(50) = 50。所以,若模板i满足p | li,p > sqrt(50),则我们将它扩展为l' = 12 * li的新模板。这样我们得到了新的模板以替换旧模板,而它们的长度有且仅有两种:32 * 27 * 25 * 49,及2 * 2 * 3 * p,其中p为大于sqrt(50)的素数。它们的最大公因数显然是2 * 2 * 3,而它们拆分后的新长度显然是两两互质的。

[TCO 2012 Round 3A Level3] CowsMooing (数论,中国剩余定理,同余方程)的更多相关文章

  1. acm数论之旅--中国剩余定理

    ACM数论之旅9---中国剩余定理(CRT)(壮哉我大中华╰(*°▽°*)╯)   中国剩余定理,又名孙子定理o(*≧▽≦)ツ 能求解什么问题呢? 问题: 一堆物品 3个3个分剩2个 5个5个分剩3个 ...

  2. 数论E - Biorhythms(中国剩余定理,一水)

    E - Biorhythms Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Subm ...

  3. hihocode 九十七周 中国剩余定理

    题目1 : 数论六·模线性方程组 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:今天我听到一个挺有意思的故事! 小Hi:什么故事啊? 小Ho:说秦末,刘邦的将军 ...

  4. 《孙子算经》之"物不知数"题:中国剩余定理

    1.<孙子算经>之"物不知数"题 今有物不知其数,三三数之剩二,五五数之剩七,七七数之剩二,问物几何? 2.中国剩余定理 定义: 设 a,b,m 都是整数.  如果 m ...

  5. POJ 1006 中国剩余定理

    #include <cstdio> int main() { // freopen("in.txt","r",stdin); ; while(sca ...

  6. poj1006中国剩余定理

    Biorhythms Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 103506   Accepted: 31995 Des ...

  7. (伪)再扩展中国剩余定理(洛谷P4774 [NOI2018]屠龙勇士)(中国剩余定理,扩展欧几里德,multiset)

    前言 我们熟知的中国剩余定理,在使用条件上其实是很苛刻的,要求模线性方程组\(x\equiv c(\mod m)\)的模数两两互质. 于是就有了扩展中国剩余定理,其实现方法大概是通过扩展欧几里德把两个 ...

  8. 洛谷P2480 [SDOI2010]古代猪文(费马小定理,卢卡斯定理,中国剩余定理,线性筛)

    洛谷题目传送门 蒟蒻惊叹于一道小小的数论题竟能涉及这么多知识点!不过,掌握了这些知识点,拿下这道题也并非难事. 题意一行就能写下来: 给定\(N,G\),求\(G^{\sum \limits _{d| ...

  9. 洛谷P3868 [TJOI2009]猜数字(中国剩余定理,扩展欧几里德)

    洛谷题目传送门 90分WA第二个点的看过来! 简要介绍一下中国剩余定理 中国剩余定理,就是用来求解这样的问题: 假定以下出现数都是自然数,对于一个线性同余方程组(其中\(\forall i,j\in[ ...

随机推荐

  1. 转载:C# HashSet 用法

    原文地址:http://www.cnblogs.com/xiaopin/archive/2011/01/08/1930540.html   感谢博主分享! NET 3.5在System.Collect ...

  2. jquery $('#btn').click与$("#btn").live("click",function()有什么区别?

    live方法绑定的事件处理函数,在页面中未来添加的元素只要满足原来的选择器,仍然会导致事件触发.普通的事件绑定则没有这个效果.对于#btn这个选择器来说,如果你未来将id为btn的元素删除,然后再创建 ...

  3. 程序里面的system.out.println()输出到其他位置,不输出到tomcat控制台。

    设置startup.bat: call "%EXECUTABLE%" run %CMD_LINE_ARGS% >> ..\logs\kongzitai.txt 将sys ...

  4. iOS 中Window优先级的问题

    在项目中,视频播放时候遇到网络切换需要弹出AlertView提醒用户,忽然发现转屏的时候播放View加到KeyWindow的时候把AleryView挡住了.如图 因为转屏的时候视图是直接加载到 [UI ...

  5. UNIX基础知识

    一.线程 线程是进程某程序段的一次运行. 1.线程共享资源,利用共享的资源,线程很容易能够互相通信 (1)进程代码段:每个线程有各自的寄存器组,在运行时期拷贝给cpu寄存器,来确定运行的是哪段代码段. ...

  6. 为什么struts2 ajax 方法执行两次

    struts2中使用json插件执行ajax处理时,如果方法名是get方法的时候,方法会莫名其妙的执行两次. 原因: struts2 中JSON的原理是在ACTION中的get方法都会序列化,所以前面 ...

  7. javascript 读取内联之外的样式(style、currentStyle、getComputedStyle区别介绍) (转载)

    样式表有三种方式: 内嵌样式(inline Style) :是写在Tag里面的,内嵌样式只对所有的Tag有效.   (也称作“内联样式”) 内部样式(internal Style Sheet):是写在 ...

  8. ecshop里Ajax.call()方法定义

    Ajax.call()在哪个文件中定义的? 在加载的js/transport.js文件里面. Ajax.cal()方法就是Transport.run()方法

  9. $_GLOBALS超全局数组和global定义的全局变量区别?

    全局变量:主程序中定义的变量(函数外部),只能在主程序中使用,在函数内部不能调用 背景:解决在函数内部调用全局变量的问题 解决方法: 1.在函数内部声名全局变量 <?php public $va ...

  10. IE6不完全支持!important

    !important !important是CSS1中定义的语法,作用是提高指定样式规则的应用优先权.语法格式如:.demo{color:red !important;} IE6支持重定义的!impo ...