版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址

http://blog.csdn.net/lzuacm。

HDUoj 5391 - Zball in Tina Town

在线提交:

http://acm.hdu.edu.cn/showproblem.php?pid=5391

Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)

Total Submission(s): 2790 Accepted Submission(s): 1309

题目大意:

Tina Town 是一个善良友好的地方, 这里的每一个人都互相关心。

Tina有一个球,它的名字叫zball。zball很神奇,它每天会变大一些。在第一天,它和原始大小一样。 在第二天,它的大小将成为第一天的2倍。 在第n天,它的大小将为第(n-1)天大小的n倍。Tina想知道,zball在第n-1天时的大小对n取模是多少呢?

思路:

陶哲轩在他的书Solving mathematical problems 中提到威尔逊定理(n−1)!+1 (mod n)≡0⇔n" role="presentation" style="position: relative;">(n−1)!+1 (mod n)≡0⇔n(n−1)!+1 (mod n)≡0⇔n is prime.

首先,来回忆一下阶乘的定义:

m!=∏k=1mk=1×2×3×⋯×m." role="presentation" style="position: relative;">m!=∏mk=1k=1×2×3×⋯×m.m!=∏k=1mk=1×2×3×⋯×m.

可得出结论: 存在a, b ∈" role="presentation" style="position: relative;">∈∈ [1, m] 使得a⋅b" role="presentation" style="position: relative;">a⋅ba⋅b能整除m!

假定 m=n−1" role="presentation" style="position: relative;">m=n−1m=n−1,

原问题可分类如下:

  1. n是质数,则由威尔逊定理知:

    (n−1)! (mod n)=−1(mod n)=n−1" role="presentation" style="position: relative;">(n−1)! (mod n)=−1(mod n)=n−1(n−1)! (mod n)=−1(mod n)=n−1.
  2. n是合数(composite),且n不能表示为质数的平方,则∃a,b" role="presentation" style="position: relative;">∃a,b∃a,b使得n=a⋅b | m!" role="presentation" style="position: relative;">n=a⋅b | m!n=a⋅b | m!,即

    a⋅b=n | (n−1)!" role="presentation" style="position: relative;">a⋅b=n | (n−1)!a⋅b=n | (n−1)!

  3. n是合数,且n可表示成质数p的平方,而且 p > 2+1" role="presentation" style="position: relative;">2–√+12+1, 即 p≥3" role="presentation" style="position: relative;">p≥3p≥3

    此时的目标是寻找a, b使得 a⋅b | p2" role="presentation" style="position: relative;">a⋅b | p2a⋅b | p2,不妨假设 a = k1⋅p" role="presentation" style="position: relative;">k1⋅pk1⋅p, b = k2⋅p" role="presentation" style="position: relative;">k2⋅pk2⋅p.

    n=p2" role="presentation" style="position: relative;">n=p2n=p2, 则n的约数有1,p,p2" role="presentation" style="position: relative;">1,p,p21,p,p2.

    下面用反证法来证明为何a、b均与p线性相关,如果a(≥1" role="presentation" style="position: relative;">≥1≥1)与p线性无关,则b=k⋅p2≥p2(k≥1)" role="presentation" style="position: relative;">b=k⋅p2≥p2(k≥1)b=k⋅p2≥p2(k≥1),而b≤m=n−1=p2−1" role="presentation" style="position: relative;">b≤m=n−1=p2−1b≤m=n−1=p2−1,矛盾。同理假设b与p线性无关也会出现同样的矛盾,因此a、b均与p线性相关。

    1≤a=k1⋅p&lt;b=k2⋅p≤p2−1" role="presentation" style="position: relative;">1≤a=k1⋅p<b=k2⋅p≤p2−11≤a=k1⋅p<b=k2⋅p≤p2−1

    让a尽量小, 则k1=1" role="presentation" style="position: relative;">k1=1k1=1, 令t=k2" role="presentation" style="position: relative;">t=k2t=k2, 于是b可表示为t⋅p" role="presentation" style="position: relative;">t⋅pt⋅p.

    ∴t⋅p≤p2−1" role="presentation" style="position: relative;">∴t⋅p≤p2−1∴t⋅p≤p2−1

    解上述不等式可得 p≥t+t2+42=f(t) (t≥2)" role="presentation" style="position: relative;">p≥t+t2+4√2=f(t) (t≥2)p≥t+t2+42=f(t) (t≥2), 容易分析得f(t)是递增函数。

    当t=2" role="presentation" style="position: relative;">t=2t=2时, p≥2+1" role="presentation" style="position: relative;">p≥2–√+1p≥2+1,即p∈[2+1,+∞)" role="presentation" style="position: relative;">p∈[2–√+1,+∞)p∈[2+1,+∞), 于是b=2⋅p" role="presentation" style="position: relative;">b=2⋅pb=2⋅p.

    而当t&gt;2" role="presentation" style="position: relative;">t>2t>2时,p的解集是上述区间的子集, 因此p的解集可取两者中范围较大者, 即[2+1,+∞)" role="presentation" style="position: relative;">[2–√+1,+∞)[2+1,+∞)。

    由于p≥2+1" role="presentation" style="position: relative;">p≥2–√+1p≥2+1, 而 p∈Z" role="presentation" style="position: relative;">p∈Zp∈Z, 因而p≥3" role="presentation" style="position: relative;">p≥3p≥3.

    因此

    a⋅b=2⋅p2=2⋅n|(n−1)!" role="presentation" style="position: relative;">a⋅b=2⋅p2=2⋅n|(n−1)!a⋅b=2⋅p2=2⋅n|(n−1)!

    故 (n-1)! (mod n) = 0

  4. n是合数,且n可表示成质数p的平方,而且 p < 2+1" role="presentation" style="position: relative;">2–√+12+1, 即 p = 2, n=4.

    此时,无法找到满足条件的a和b,4∤3!=6" role="presentation" style="position: relative;">4∤3!=64∤3!=6.

已AC代码:

using System;

namespace hdoj_zball
{
    public class Solution
    {
        public int Mod(int n)
        {
            if (IsPrime(n))
                return n - 1;
            if (n == 4)
                return 2;           

            return 0;
        }

        public bool IsPrime(int m)
        {
            if (m < 2)
                return false;
            for (int i = 2; i * i <= m; i++)
            {
                if (m % i == 0)
                    return false;
            }
            return true;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            while (n-- > 0)
            {
                string[] s = Console.ReadLine().Split();
                int num = int.Parse(s[0]);
                Solution sol = new Solution();
                Console.WriteLine(sol.Mod(num));
            }
        }
    }
}

Rank (C#):

Exe.Time Exe.Memory
1185ms 26908K

Reference:

elementary number theory - If n≠4" role="presentation" style="position: relative;">n≠4n≠4 is composite, then n" role="presentation" style="position: relative;">nn divides (n−1)!" role="presentation" style="position: relative;">(n−1)!(n−1)!. - Mathematics Stack Exchange

https://math.stackexchange.com/questions/164852/if-n-ne-4-is-composite-then-n-divides-n-1

C#版 - HDUoj 5391 - Zball in Tina Town(素数) - 题解的更多相关文章

  1. (hdu)5391 Zball in Tina Town

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5391 Problem Description Tina Town is a friendl ...

  2. HDU 5391 Zball in Tina Town【威尔逊定理】

    <题目链接> Zball in Tina Town Problem Description Tina Town is a friendly place. People there care ...

  3. hdu 5391 Zball in Tina Town 威尔逊定理 数学

    Zball in Tina Town Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Oth ...

  4. hdu 5391 Zball in Tina Town(打表找规律)

    问题描述 Tina Town 是一个善良友好的地方,这里的每一个人都互相关心. Tina有一个球,它的名字叫zball.zball很神奇,它会每天变大.在第一天的时候,它会变大11倍.在第二天的时候, ...

  5. HDU 5391 Zball in Tina Town (打表,水)

    题意: Tina有一个球,它的名字叫zball.zball很神奇,它会每天变大.在第一天的时候,它会变大1倍.在第二天的时候,它会变大2倍.在第n天的时候,它会变大n倍.zball原来的体积是1.Ti ...

  6. hdoj 5391 Zball in Tina Town

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5391 相关数论结论: 威尔逊定理——当且仅当p为素数时:( p -1 )! ≡ p-1 ( mod p ...

  7. HDU-5391 Zball in Tina Town

    (n-1)!/n 就是如果n为素数,就等于n-1else为0. 求素数表: Zball in Tina Town Time Limit: 3000/1500 MS (Java/Others) Memo ...

  8. hdu5391 Zball in Tina Town(威尔逊定理)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Zball in Tina Town Time Limit: 3000/1500 ...

  9. 判素数+找规律 BestCoder Round #51 (div.2) 1001 Zball in Tina Town

    题目传送门 /* 题意: 求(n-1)! mod n 数论:没啥意思,打个表能发现规律,但坑点是4时要特判! */ /***************************************** ...

随机推荐

  1. 【Java并发编程一】线程安全问题

    1.多线程的实现 多线程有两种实现方式: 1.1.继承Thread类 =>示例:A a=new A(); a.start();   1.2.实现Runnable接口 =>示例:A a=ne ...

  2. C++函数返回值为类对象但未调用复制构造函数

    参考资料:https://blog.csdn.net/sxhelijian/article/details/50977946 不要迷信书本,要学会自己调试程序.

  3. xpath路径定位

    preceding-sibling选择同级层所有节点向前查找 //div[@id='id1']/preceding-sibling::div/a 例如:“更多产”超链接的同级向上数第二个元素,即“登陆 ...

  4. 3dmax 3dmax计算机要求 3dmax下载

    渲染首先是要X64兼容台式电脑,笔记本不行,笔记本就是学生拿来玩还行,渲染大图笔记本真的是发热. 配置一般的电脑和笔记本千万不要尝试安装3dmax2019了,很卡的,3dmax2019只有64位,没有 ...

  5. Windows本地代码仓库使用连接教程

    目录 软件安装 修改语言为中文 克隆远程仓库 文件上传教程 软件安装 安装Git(软件下载链接) 根据自己的系统选择对应版本下载安装 安装TortoiseGit(软件下载链接) 1.下载完毕解压文件夹 ...

  6. 图解CSS3核心技术与案例实战(1)

    前言: 我买了一本<图解CSS3核心技术与案例实战>大漠写的,为了提高自己的自觉性呢,抓紧看书,把读书笔记放在这上面,跟大家一起分享,也为督促自己完成读书计划. 文末有微信公众号,感谢你的 ...

  7. sqlalchemy 使用

    创建连接 # 参数: '数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名' from sqlalchemy import create_engine engine = crea ...

  8. JavaScript(八)

    闭包 什么是闭包 函数嵌套函数,内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾回收机制收回 function aaa(a){ var b = 5; function bbb(){ a++; ...

  9. springboot项目打包

    使用IDEA或Eclipse的插件创建springboot项目的时候可以选择打包方式,一般情况下都是选择的jar包. 当想将原来的jar包格式的项目打成war包在本地tomcat下运行时可以通过以下几 ...

  10. canvas生成海报

    虽然之前也做过类似的生成海报的项目,但是这个项目我又网上查找了一下,发现一个插件挺好用的  html2canvas.js http://html2canvas.hertzen.com/这里可以下载这个 ...