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

  • 相关阅读:
    第十六周总结
    第十五周学习进度
    输出最长字符串链
    第二阶段冲刺10
    第二阶段冲刺09
    第二阶段冲刺08
    输入法评价
    第十四周进度总结
    collections模块
    shutil模块(了解)
  • 原文地址:https://www.cnblogs.com/xtualong/p/5972177.html
Copyright © 2011-2022 走看看