NC200312. I-迷途的怪物
描述
输入描述
第一行输入一个整数T (1<=T<=5),代表有T个样例,
对于每组样例,输入一行,每行输入一个质数p (2<=p<=109)和一个整数n (0<=n<101000001 )。
输出描述
对于每一组样例,输出(p-1)n % p
(注:'%'是取模运算符,也叫取余运算符,比如:8 % 3 = 2,因为8除于3的余数是2。更详细的说:因为8 = 2*3 + 2,前一部分 "2*3" 是3的倍数,后一部分 "2" 是小于3的数,后一部分就是8 % 3的结果)
示例1
输入:
2 2 1 2 2
输出:
1 1
说明:
提示:n会很大,请不要试图使用int和long long存,要用char数组存。另外,请不要执行1e7次及以上的取模运算,否则超时。C++14(g++5.4) 解法, 执行用时: 244ms, 内存消耗: 6232K, 提交时间: 2019-12-09 21:05:28
#include <bits/stdc++.h> using namespace std; char n[1000005]; int main() { int T; cin>>T; for(int t = 1; t <= T; t++) { int p; cin>>p; cin>>n; if((n[strlen(n)-1]-'0')%2==0) cout<<1<<endl; else cout<<p-1<<endl; } return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 166ms, 内存消耗: 2440K, 提交时间: 2019-12-07 21:46:30
#include<bits/stdc++.h> using namespace std; int main(){ int T,m,p; string n; cin>>T; while(T--){ cin>>p>>n; m=(n[n.length()-1]-'0')&1; cout<<(m?p-1:1)<<endl; } return 0; }
Ruby(2.4.2) 解法, 执行用时: 63ms, 内存消耗: 14600K, 提交时间: 2019-12-07 22:41:58
T = gets.to_i T.times do p, n = gets.split if n[-1].to_i & 1 == 1 puts p.to_i - 1 else puts 1 end end
Python3(3.5.2) 解法, 执行用时: 50ms, 内存消耗: 11156K, 提交时间: 2019-12-11 00:58:18
for i in range(int(input())): c = input().split() print(1 if(int(c[1][-1])%2==0) else int(c[0])-1)