【描述】

N的阶乘写作N!表示小于等于N的所有正整数的乘积。阶乘会很快的变大,如13!就必须用32位整数类型来存储,70!即使用浮点数也存不下了。你的任务是找到阶乘最后面的非零位。举个例子,5!=1*2*3*4*5=120所以5!的最后面的非零位是2,7!=1*2*3*4*5*6*7=5040,所以最后面的非零位是4。

 
 

【格式】

PROGRAM NAME: rect4
INPUT FORMAT:(file rect4.in)
 

共一行,一个整数不大于4,220的整数N。

OUTPUT FORMAT:(file rect4.out)

共一行,输出N!最后面的非零位。

【分析】

先打素数表,然后分解质因数,再去掉可以产生末尾0的2和5(不是所有二和五,而是他们的最小值),最后在把剩下的乘起来MOD10。

 #include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
const int maxn=;
using namespace std;
int cnt[maxn],vis[maxn];
int prime[maxn];
void built_prime();//打表
void check(int n);
int pow_mod(int num,int t);
int main()
{
int n,i,temp,ans=;
//文件操作
freopen("fact4.in","r",stdin);
freopen("fact4.out","w",stdout);
built_prime();
//printf("1");
scanf("%d",&n);
for (i=;i<=n;i++) check(i);//分解质因数
temp=min(cnt[],cnt[]);
cnt[]-=temp;cnt[]-=temp;
for (i=;i<=prime[];i++)
{
if (cnt[prime[i]]!=)
ans=(ans*pow_mod(prime[i],cnt[prime[i]]))%;//快速幂取模
}
printf("%d",ans%);
return ;
}
int pow_mod(int num,int t)
{
if (t==) return num%;
if (t==) return (num*num)%;
int temp=pow_mod(num,t/);
if (t%==) return (temp*temp)%;
else return (temp*temp*num)%;
}
void built_prime()
{
int i,j;
memset(cnt,,sizeof(cnt));
prime[]=;
for (i=;i<=maxn;i++)
{
if (vis[i]==)
{
prime[++prime[]]=i;
for (j=i;j<=maxn;j+=i) vis[j]=;
}
}
}
void check(int n)
{
int i;
while (n!=)
{
for (i=;i<=prime[];i++)
if (n%prime[i]==) {cnt[prime[i]]++;n=n/prime[i];break;}
}
}

最新文章

  1. JVM调优总结 -Xms -Xmx -Xmn -Xss
  2. C#中Dictionary&lt;TKey,TValue&gt;排序方式
  3. JavaScript前端框架的思考
  4. Ajax (一)
  5. OpenFlow Switch学习笔记(五)——Group Table、Meter Table及Counters
  6. border-radius讲解1
  7. Swift利用闭包(closure)来实现传值--&gt;前后两个控制器的反向传值
  8. ObjectiveC 文件操作二
  9. CentOS 7 x64 docker 使用点滴
  10. NIO(一、概述)
  11. .net之简单工厂模式
  12. .Net之用户控件笔记
  13. 现网环境业务不影响,但是tomcat启动一直有error日志,ERROR org.apache.catalina.startup.ContextConfig- Unable to process Jar entry [module-info.class] from Jar [jar:file:/home/iufs/apache-tomcat/webapps/iufs/WEB-INF/lib/asm
  14. Ethzasl MSF源码阅读(1):程序入口和主题订阅
  15. freeswitch编译安装,初探, 以及联合sipgateway, webrtc server的使用场景。
  16. java线程安全之并发Queue
  17. LeetCode-300.Longst Increasing Subsequence
  18. Linux 安装redis 基本配置 发布订阅,安全配置,持久化 rdb ,aof
  19. 《机器学习实战》ID3算法实现
  20. JavaScript回调函数及数组方法测试

热门文章

  1. Unity NGUI根据高度自适应屏幕分辨率
  2. Unity 小地图制作插件NJG MiniMap的简单使用
  3. Qt入门(18)——使用信号和槽连接控件
  4. python操作RabbiMQ
  5. selenium webdriver python 操作IE浏览器
  6. (组合数学3.1.1.2)UVA 10098 Generating Fast(使用字典序思想产生所有序列)
  7. Mysql join语句解析
  8. Spark GraphX的函数源码分析及应用实例
  9. PHP安全编程:网站安全设计的一些原则(转)
  10. log4j 日志的初始化