【USACO 3.2.1】阶乘
2024-08-25 03:57:58
【描述】
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;}
}
}
最新文章
- JVM调优总结 -Xms -Xmx -Xmn -Xss
- C#中Dictionary<;TKey,TValue>;排序方式
- JavaScript前端框架的思考
- Ajax (一)
- OpenFlow Switch学习笔记(五)——Group Table、Meter Table及Counters
- border-radius讲解1
- Swift利用闭包(closure)来实现传值-->;前后两个控制器的反向传值
- ObjectiveC 文件操作二
- CentOS 7 x64 docker 使用点滴
- NIO(一、概述)
- .net之简单工厂模式
- .Net之用户控件笔记
- 现网环境业务不影响,但是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
- Ethzasl MSF源码阅读(1):程序入口和主题订阅
- freeswitch编译安装,初探, 以及联合sipgateway, webrtc server的使用场景。
- java线程安全之并发Queue
- LeetCode-300.Longst Increasing Subsequence
- Linux 安装redis 基本配置 发布订阅,安全配置,持久化 rdb ,aof
- 《机器学习实战》ID3算法实现
- JavaScript回调函数及数组方法测试
热门文章
- Unity NGUI根据高度自适应屏幕分辨率
- Unity 小地图制作插件NJG MiniMap的简单使用
- Qt入门(18)——使用信号和槽连接控件
- python操作RabbiMQ
- selenium webdriver python 操作IE浏览器
- (组合数学3.1.1.2)UVA 10098 Generating Fast(使用字典序思想产生所有序列)
- Mysql join语句解析
- Spark GraphX的函数源码分析及应用实例
- PHP安全编程:网站安全设计的一些原则(转)
- log4j 日志的初始化