zoukankan      html  css  js  c++  java
  • OJ随笔——【1088-N!】——同余定理

    题目如下:

    Description

    请求N!(N<=10000),输出结果对10007取余
    输入
    每行一个整数n,遇到-1结束。
    输出
    每行一个整数,为对应n的运算结果。

     

    Sample Input

    1
    2
    -1
     

    Sample Output

    1
    2

    分析思路:

      题目思路很简单,每读取一个输入就输出对应输入的阶乘。直到遇到输入为-1时结束程序。

    核心问题:

      这个题目在写的时候遇到的难点是N!实在是太大了,根本储存不下,之后试了long long int 也还是只能储存到20几就会溢出。解决这个问题的核心通过查询资料后找到了“同余定理”。

    同余定理:在本题中就是,(N!)%10007 = [(N%10007)*((N-1)%10007)*((N-2)%10007)……]%10007

    百度百科-同余定理:http://baike.baidu.com/link?url=5wSVwGsN3xHBzF638XMHQ3f2UbjwcKEgjjxvL_aA4sqfgtlV73FP6ExftXGeohPEVQ_wksMDNrGtAlCGobwo602y2_o4r04gYMrRvh9cvpT40m3z-Go6PhYCKqUSYIQ7

    最后附上我的程序源码:

    #include <stdio.h>
    int main ()
    {
        int n;
        while (n!=EOF)
        {
            int sum = 1;
            scanf ("%d",&n);
            if (n==-1) break;
            for (;n>0;n--)
            {
                sum = sum*n%10007;
            }
            printf ("%d
    ",sum);
        }
        return 0;
    }

    2016-10-18

  • 相关阅读:
    ThinkPhp学习11
    ThinkPhp学习10
    1.自我介绍
    Axure高级教程--在原型中插入视频
    Axure制作iphone手机交互模型—覆盖切换
    对产品的一些总结
    详解Axure的Masters功能
    详解使用Axure 制作Tab切换功能
    产品经理的初识
    作为产品经理--如何写好PRD文档
  • 原文地址:https://www.cnblogs.com/xtualong/p/5972177.html
Copyright © 2011-2022 走看看