比赛 EYOI暨SBOI暑假快乐赛4th 评测结果 AAWEEEEEEE
题目名称 选题 最终得分 20
用户昵称 该账号已注销 运行时间 2.719 s
代码语言 C++ 内存使用 26.39 MiB
提交时间 2022-06-28 09:35:28
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long n,m,prime[50010]={0},cnt=1,q,cnt2=0,p=0;
long long v[50010]={0},zy[50010]={0},c[2010][2010];
int pr()
{
    for(int i=2;i<=m;i++)
    {
        if(v[i]==0)
        {
            v[i]=i;
            prime[cnt++]=i;
        }
        for(int j=1;j<=cnt;j++)
        {
            if(prime[j]<=v[i]&&prime[j]*i<=m)
            {
                v[i*prime[j]]=prime[j];
            }
        }
    }
    return 0;
}
int main(){
    freopen("mathproblem.in","r",stdin);
    freopen("mathproblem.out","w",stdout);
    cin>>n>>m>>q;
    pr();
    for(int i=1;i<=n;i++)
        if(n%i==0)
            zy[++cnt2]=i;
    for(int i=0;i<=n;i++)
    {
        c[i][i]=1;
        c[i][0]=1;
    }
    for(long long i=1;i<=n;i++)
    {
        for(long long j=1;j<=min(i,n);j++)
        {
            c[i][j]=c[i-1][j]+c[i-1][j-1];
        }
    }
    for(int i=1;i<=cnt2;i++)
    {
        p+=c[n][zy[i]];
    }
    for(int i=1;i<=q;i++)
    {
        int s;
        long long Q=1;
        cin>>s;
        for(int j=1;j<=s;j++)
        {
            int x;
            cin>>x;
            Q*=prime[x];
        }
        cout<<p%Q<<endl;
    }
    return 0;
}