ICPC补题

The 2022 ICPC Asia Regionals Online Contest (II)

A Yet Another Remainder

题意

给一个大整数x,再给n行,第i行给i个数,这i个数的第j个数为a[j]+a[j+i]+...+a[j+ki<=n]。再对你进行m次询问,每次给你一个素数p,97>=p>=7,p可以为3。让你给出x%p的结果。

题解

由费马小定理,则当n<=100,第n行的每一个数即为x上每一位数。当n>100时,对于p,则只要找到p-1行,进行下图计算,即可得到结果。图片说明 图片说明

代码

void init()
{
    for (int i = 1; i <= 100; i++)
    {
        c[i][0] = 1;
        for (int j = 1; j <= i; j++)
        {
            c[i][j] = (c[i][j - 1] * 10) % i;
        }
    }
}

void solve()
{
    int n;
    cin >> n;
    for (int i = 1; i <= min(100,n); i++)
    {
        for (int j = 1; j <= i; j++)
            cin >> a[i][j];
    }
    int m;
    cin >> m;
    if (n <= 100)
    {
        while (m--)
        {
            int p;
            cin >> p;
            int sum = 0;
            for (int i = 1; i <= n; i++)
            {
                (sum = sum * 10 + a[n][i]) %= p;
            }
            cout << sum << endl;
        }
    }
    else
    {
        while (m--)
        {
            int p;
            cin >> p;
            int sum = 0;
            for (int i = 1; i <= p - 1; i++)
            {
                (sum += a[p - 1][i] % p * c[p][(n - i) % (p - 1)]) %= p;
            }
            cout << sum << endl;
        }
    }
}
全部评论

相关推荐

挥毫自在:想白嫖你呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务