在解题时可以如果给出公式,可以自己举例,找出规律,从而归纳出更简便的算法。
比如:
链接:https://ac.nowcoder.com/acm/contest/3036/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的结果)
示例1
输入
复制
2
2 1
2 2
输出
复制
1
1
说明
提示:n会很大,请不要试图使用int和long long存,要用char数组存。另外,请不要执行1e7次及以上的取模运算,否则超时。
输入输出代码(参考):
#include <stdio.h>
char n[1000005];
int main()
{
int T;
scanf("%d", &T);
for(int t = 1; t <= T; t++)
{
int p;
scanf("%d %s", &p, n);
//…;
//printf…;
}
return 0;
}
题解
该题在解题时不可以套用公式依次计算,而应该举例,找规律。在此题中,举例21,22,23,24,25,26,31,32,33,34,35,36,41,42,43,45,46等等。找到规律n为奇数时答案为p-1;n为偶数时,答案为1,由此解题。