P1008 N的阶乘 mod P

OJ:51Nod

链接:"http://www.51nod.com/Challenge/Problem.html#!#problemId=1008"

题目描述:

输入N和P(P为质数),求N! Mod P = ? (Mod 就是求模 %)
例如:n = 10, P = 11,10! = 3628800
3628800 % 11 = 10

输入:

两个数N,P,中间用空格隔开。(N < 10000, P < 10^9)

输出:

输出N! mod P的结果。

限制条件:

时间:1s     空间: 131072KB

输入样例:

10 11

输出样例:

10

思路:阶乘——一看就觉得很大,10!=3628800,而最大可以去10000-1......那大概是long long long long long long long long也放不了,但是看到后面对P求余,P最大是\(10^9\),也就是说答案不会大于int的范围.......这个时候就想到了每一步都求余防止溢出.......这里就要一点点数学知识了

( a * b) % c == ( ( a % c ) * b ) % c

这个公式很重要,以后还要用到,牢记

C++代码(错误的)

#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b,ans;
cin>>a>>b;
ans=1%b;
for(int i=2;i<=a;i++)
{
ans=((i%b)*ans)%b;
}
cout<<ans;
return 0;
}

为什么会错呢?明明什么都考虑了

然而,由于求余的结果可能会达到\(10^8\),这个时候再乘以100就爆int的范围了

所以还是要 long long

C++代码(更正)

#include<bits/stdc++.h>
using namespace std;
int main()
{
long long int a,b,ans;
cin>>a>>b;
ans=1%b;
for(int i=2;i<=a;i++)
{
ans=((i%b)*ans)%b;
}
cout<<ans;
return 0;
}

C代码

#include<stdio.h>
int main()
{
long long int a,b,ans;
scanf("%lld %lld",&a,&b);
ans=1%b;
for(int i=2;i<=a;i++)
{
ans=((i%b)*ans)%b;
}
printf("%d",ans);
return 0;
}

51nod OJ P1008 N的阶乘 mod P的更多相关文章

  1. 快速幂的类似问题(51Nod 1008 N的阶乘 mod P)

    下面我们来看一个容易让人蒙圈的问题:N的阶乘 mod P. 51Nod 1008 N的阶乘 mod P 看到这个可能有的人会想起快速幂,快速幂是N的M次方 mod P,这里可能你就要说你不会做了,其实 ...

  2. 51 Nod 1008 N的阶乘 mod P【Java大数乱搞】

    1008 N的阶乘 mod P 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 输入N和P(P为质数),求N! Mod P = ? (Mod 就是求模 %)   例如:n ...

  3. 51nod 1008 N的阶乘 mod P

    输入N和P(P为质数),求N! Mod P = ? (Mod 就是求模 %)   例如:n = 10, P = 11,10! = 3628800 3628800 % 11 = 10   Input 两 ...

  4. 51nod OJ P1000 A+B

    P1000 A+B OJ:51Nod 链接:"http://www.51nod.com/Challenge/Problem.html#!#problemId=1000" 题目描述: ...

  5. N的阶乘 mod P

    基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 输入N和P(P为质数),求N! Mod P = ? (Mod 就是求模 %)   例如:n = 10, P = 11,10 ...

  6. 九度OJ 1076 N的阶乘 -- 大数运算

    题目地址:http://ac.jobdu.com/problem.php?pid=1076 题目描述: 输入一个正整数N,输出N的阶乘. 输入: 正整数N(0<=N<=1000) 输出: ...

  7. 九度OJ 1067 n的阶乘 (模拟)

    题目1067:n的阶乘 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5666 解决:2141 题目描写叙述: 输入一个整数n,输出n的阶乘 输入: 一个整数n(1<=n<=2 ...

  8. 51Nod 1058: N的阶乘的长度(斯特林公式)

    1058 N的阶乘的长度  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 输入N求N的阶乘的10进制表示的长度.例如6! = 720,长度为3. Inp ...

  9. 【51NOD-0】1008 N的阶乘 mod P

    [算法]简单数学 [题解]多项式展开:(a*b)%p=(a%p*b%p)%p #include<cstdio> #include<algorithm> #define rep( ...

随机推荐

  1. python字符串的魔法

    *首字母大写test="aslf"v=test.capitalize()print(v) *所有字母变成小写test="QWFDE"v=test.casefol ...

  2. django执行原生sql

    一.ORM row()方法:只能实现查询 d_list = models.Article.objects.raw( 'select nid, count(nid) as num,strftime(&q ...

  3. ajax执行成功不进入success方法

    当dataType的值为json时,传入的值和返回的值符合json格式的时候,执行成功才会进入success方法,否则进入error方法.

  4. 将python文件打包成exe可运行文件

    https://blog.csdn.net/douzhenwen/article/details/78886244

  5. boost中bind的使用

    :first-child { margin-top: 0px; } .markdown-preview:not([data-use-github-style]) h1, .markdown-previ ...

  6. 转 Java操作PDF之iText详细入门

    转 Java操作PDF之iText详细入门 2016年08月08日 11:06:00 阅读数:19490 iText是著名的开放项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成 ...

  7. 201771010134杨其菊《面向对象程序设计(java)》第十七周学习总结

    第十七周学习总结 1. 程序是一段静态的代码,它是应用程序执行的蓝本.进程是程序的一次动态执行,它对应了从代码加载.执行至执行完毕的一个完整过程.操作系统为每个进程分配一段独立的内存空间和系统资源,包 ...

  8. C#将结构体和指针互转的方法

    . 功能及位置 将数据从托管对象封送到非托管内存块,属于.NET Framework 类库 命名空间:System.Runtime.InteropServices 程序集:mscorlib(在 msc ...

  9. C++ 中利用 Opencv 得到不规则的ROI 区域(已知不规则区域)

    因为需要,之前写了一个利用mask 得到不规则ROI 区域的程序. 现在需要修改,发现自己都看不懂是怎么做的了.. 所以把它整理下来. 首先利用 鼠标可以得到 你想要的不规则区域的 顶点信息.具体这里 ...

  10. 《MySQL必知必会》官方提供的数据库和表

    数据用于配合<MySQL必知必会>(MySQL Crash Course)这本书使用,配套SQL文件也可在Ben Forta网站下载. Ben Forta网址:http://forta.c ...