HDU 3123 大数阶乘取模
来源:互联网 发布:cgwang插画网络 编辑:程序博客网 时间:2024/05/01 02:12
题意:Output the answer of (0! + 1! + 2! + 3! + 4! + ... + n!)%m.
这题想难了,暴力就行的东西我竟然素因子分解那么做了,这么做素数的时候比暴力慢,不是素数的时候我也不知道快不快。。
#include <iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define maxn 1100bool isprime[maxn];int prime[maxn],nprime;void getprime(){ memset(isprime,1,sizeof(isprime)); long long i,j; nprime=0; for(i=2; i<maxn; i++) if(isprime[i]) { prime[nprime++]=i; for(j=i*i; j<maxn; j+=i) isprime[j]=0; }}int factor[35],tol;void findfac(int m){ int d=m; tol=0; for(int i=0; prime[i]*prime[i]<=m; i++) while(d%prime[i]==0) factor[tol++]=prime[i],d/=prime[i]; if(d>1) factor[tol++]=d;}char c[105];int n,m;int getn(){ int len=strlen(c),ans=0; for(int i=0; i<len; i++) { ans=ans*10+c[i]-'0'; if(ans>=m) return m-1; } return ans;}int main(){ int t; long long yl; getprime(); scanf("%d",&t); while(t--) { scanf("%s%d",c,&m); yl=getn(); findfac(m); int d1=yl; for(int i=2; i<=yl; i++) { int d2=i; for(int j=0; j<tol; j++) if(d2%factor[j]==0&&factor[j]!=1) d2/=factor[j],d1/=factor[j],factor[j]=1; if(d1==1) { yl=i; break; } } long long ans=1,jc=1; for(long long i=1; i<=yl; i++) jc=(jc*i)%m,ans=(ans+jc)%m; ans=(ans%m+m)%m; printf("%I64d\n",ans); } return 0;}
- HDU 3123 大数阶乘取模
- HDU 3123 GCC(大数阶乘取模)
- 大数阶乘取模
- np问题(大数阶乘取模)
- HDU--1212大数取模
- 大数取模 HDU 5832
- 大数取模(HDU-1212)
- HDU-1042(大数阶乘)
- hdu 1042 大数阶乘
- HDU 1042 大数阶乘...
- hdu-大数的阶乘
- HDU 1042 大数阶乘
- hdu 1042 大数阶乘 ,
- hdoj GCC 3123 (大数阶乘取余&转换)
- HDU-1042(大数阶乘_java)
- hdu 1042 阶乘--大数乘法
- HDU 1042 大数的阶乘
- HDU-求大数的阶乘
- hdu 2028 Lowest Common Multiple Plus
- 按钮位置编辑
- 非对称双核MCU基础知识及核间通信
- 色彩提取及应用技巧
- Redis服务器配置
- HDU 3123 大数阶乘取模
- IOS5 ARC unsafe_unretained等说明
- 包和命名空间
- 排序之直接插入排序
- 资源的软限制和硬限制
- ARRAY_SIZE 的定义
- 一步一步学数据结构之1--1(双向循环链表)
- 图解 Android 广播机制
- iOS开发常用的第三方类库