列表

详情


NC247328. 如见青山

描述

给定n,m,求m的值。其中代表阶乘,模代表取余运算。

输入描述

第一行T,mT代表数据组数,m代表模数。
接下来T行,每行一个正整数,代表n。(所有的n共用一个模数m)。
,

输出描述

对于每个n,输出一个正整数,代表m的值。

示例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;
}

上一题