I 迷途的怪兽

题目描述

圣杯能召唤过去,现在甚至未来的各种英灵。想必也有不同世界的英灵会被召唤,所以才会有对圣杯的不断响应吧。为了修复过去的错误。为了重新选择。
「吾名奥德修斯,为七骑之中的狂战士(berserker)」面前的怪物开口了,虽然具有人形,但却没有一点人的感觉。更像是失控的野兽。
「还保有理智吗」
「是的」怪物没有过多的行动「开门见山吧,吾辈是没有战胜魔女喀耳刻的奥德修斯。我不曾再见过我的妻儿,被魔女任意改造成可怕的怪物。因为同为奥德修斯而被记录在英灵座上的怪物罢了。我不打算和你们动手,但你们必须回答我的问题,才能离开。无法得到答案,连我也无法离开这个迷宫」
「请说」
「迷宫的一个岔口对应一个谜题,而这些谜题的答案都是由一个公式计算得到的,这个公式就是(p-1)n % p。每个岔口都有对应的p和n,而且p必定为一个素数。带着我,只要你计算出正确答案,我就能告诉你正确的前进方向」它起身了
「我明白了」虽然它给我感觉是失控的野兽,但却毫无危险的感觉
输入描述:
第一行输入一个整数T (1<=T<=5),代表有T个样例,
对于每组样例,输入一行,每行输入一个质数p (2<=p<=109)和一个整数n (0<=n<101000001 )。
输出描述:
对于每一组样例,输出(p-1)n % p
(注:’%'是取模运算符,也叫取余运算符,比如:8 % 3 = 2,因为8除于3的余数是2。更详细的说:因为8 = 23 + 2,前一部分 "23" 是3的倍数,后一部分 “2” 是小于3的数,后一部分就是8 % 3的结果)

这道题目在刚看到数据规模的时候会发现n非常大不能用longlong来存而应该用char数组
所以本题不应只考虑基础算法
先对要求的多项式展开,运用多项式定理发现除了第一项,后面所有的项数的系数都会含有p,所以全部约掉只剩(-1)的n次方
此时只需对n的奇偶进行讨论即可的出答案,ac代码如下

#include<iostream>
#include<string.h>
#define ll long long
using namespace std;
char s[1000101];
int n,t;
int main()
{
    cin >> t;
    while(t--) {
        cin >> n >> s;
        int len = strlen(s);
        if((s[len-1] - '0') & 1) cout << n - 1 << '\n';
        else cout << "1\n";
    }
}
发布了20 篇原创文章 · 获赞 17 · 访问量 1009

猜你喜欢

转载自blog.csdn.net/weixin_45757507/article/details/103465469
I