题目: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. Ubuntu下全命令行安装Android SDK

    为了在AWS云服务器上实现自动化打包Android APP的APK包,我需要远程命令行环境下安装Android SDK,当然还要用代理或者科学上网,这里简单整理一下过程: 首先,由于墙的原因,Andr ...

  2. Html5 Canvas Text

    html5 canvas中支持对text文本进行渲染;直接的理解就是把text绘制在画布上,并像图形一样处理它(可以加shadow.gradient.pattern.color fill等等):既然它 ...

  3. AFNetworking使用详解

    导语: 众所周知,AFNetworking是目前IOS开发中非常受欢迎的第三方网络通信类库,同时AFNetworking对苹果官方NSURLConnection和NSURLSession进行了封装,使 ...

  4. 苹果被拒的血泪史。。。(update 2015.11)

    项目提交了N此了,也审核N次了,苹果的审核机制依旧那么不急不慢.昨天刚刚又被拒了.回忆下之前的,总结一下吧. 2015.04.28 昨天被拒非常亏,app的评级是17+,但是在app展示图里有一个比较 ...

  5. C# trace debug TraceListener调试信息详解

    在C#编程中,可能要碰到把调试信息输出的问题,我们可以自己把信息显示在某个控件上,但是MS自己提供了一套机制帮助我们输出一些调试信息,这些信息有助于我们判断程序的走向,不用自己再去额外写调试代码了. ...

  6. c#结构体和字节数组的转换、字节数组和stream的转换

    本文由博主(YinaPan)原创,转载请注明出处:http://www.cnblogs.com/YinaPan/p/streambytsstruct.html using System; using ...

  7. python正则表达式入门

    基本概念 使用正则表达式需要import re 表达式前加r避免转义 \d代表数字,\s代表空白字符,\w代表字母+数字. .代表任意单个字符 {m,n}代表前面字符至少出现m次,最多出现n次. (x ...

  8. 给出2n+1个数,其中有2n个数出现过两次,如何用最简便的方法找出里面只出现了一次的那个数(转载)

    有2n+1个数,其中有2n个数出现过两次,找出其中只出现一次的数 例如这样一组数3,3,1,2,4,2,5,5,4,其中只有1出现了1次,其他都是出现了2次,如何找出其中的1? 最简便的方法是使用异或 ...

  9. 关于ligerui和其他前端脚本的学习方法(适用于自己)

    特别是看别人的源代码(来源于自己看的那个cms系统),比如ligerui,别人用的juery和ligerui结合的很灵活,比如下面一段代码 var itemiframe = "#framec ...

  10. 关于canvas 易忘属性

    globalAlpha=1//表示全局的一个透明度值 默认值是1 globalCompositeOperation // 默认值="source-over"(Default)