NC247328. 如见青山
描述
输入描述
第一行,代表数据组数,代表模数。接下来行,每行一个正整数,代表。(所有的共用一个模数)。,
输出描述
对于每个,输出一个正整数,代表模的值。
示例1
输入:
2 44137 2 3
输出:
2 720
示例2
输入:
2 523 3 4
输出:
197 225
C 解法, 执行用时: 40ms, 内存消耗: 8456K, 提交时间: 2023-02-10 20:45:44
#include<stdio.h> int main() { int t,m; scanf("%d%d",&t,&m); long long int a[100000000],k=0; a[0]=1; for(int i=1;i<=1e6;i++) { a[i]=a[i-1]*i; if(a[i]>m&&k==0) k=i; a[i]=a[i]%m; } while(t--) { int n; scanf("%d",&n); if(n>=k) printf("0\n"); else printf("%d\n",a[a[n]]); } return 0; }
pypy3 解法, 执行用时: 755ms, 内存消耗: 28140K, 提交时间: 2022-12-24 14:41:19
T, m = map(int, input().split()) ans = [1] * m for i in range(1, m): ans[i] = ans[i-1] * i % m for _ in range(T): n = int(input()) if n >= 10: print(0) continue s = 1 for i in range(1, n+1): s *= i if s >= m: print(0) continue print(ans[s])
C++(g++ 7.5.0) 解法, 执行用时: 278ms, 内存消耗: 736K, 提交时间: 2022-12-23 21:48:05
#include<bits/stdc++.h> using namespace std; int n,m; int a[1000005]; int main() { int t; cin>>t;cin>>m; long long now=1; long long v=1; for(int i=1;i;i++){ v*=i; for(int j=v/i+1;j<=v;j++){ now=now*j%m; } a[i]=now; if(v>=m)break; } while(t--){ cin>>n; cout<<a[n]<<"\n"; } }
Python3 解法, 执行用时: 1492ms, 内存消耗: 36436K, 提交时间: 2023-01-01 20:54:40
#递推,考虑整除的情况 a=[1,1,2,6,24,120,720,5040,40320,362880,3628800] b=[0]*3628801 b[1]=1 t,m=map(int,input().split()) for i in range(2,3628801): b[i]=(b[i-1]*i)%m while t: n=int(input()) if n>=10 or a[n]>=m: print(0) else: print(b[a[n]]) t-=1
C++(clang++ 11.0.1) 解法, 执行用时: 345ms, 内存消耗: 29108K, 提交时间: 2023-07-09 11:14:03
#include<bits/stdc++.h> using namespace std; long long t,x,m,a[11]={1},b[4<<20]; int main() { for(int i=1;i<11;i++) a[i]=a[i-1]*i; b[0]=1; cin>>t>>m; for(int i=1;i<=a[10];i++) b[i]=b[i-1]*i%m; for(;cin>>x;cout<<(x<11?b[a[x]]:0)<<"\n"); return 0; }