HihoCoder1663双阶乘的末尾数字([Offer收割]编程练习赛40)(暴力||数学)

时间:2023-03-09 02:46:59
HihoCoder1663双阶乘的末尾数字([Offer收割]编程练习赛40)(暴力||数学)
时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

给定正整数x和k,判断是否存在正整数1 ≤ y ≤ x使得x与y同奇偶且(x!!)/(y!!)的个位数字为k。

其中x!! = x × (x-2) × …。

如果存在这样的y,你需要输出最大的一个,如果不存在这样的y,你需要输出-1。

输入

第一行一个正整数T,表示组数。

接下来T行,每行两个正整数x和k。

对于30%的数据1 ≤ T ≤ 3, 1 ≤ x ≤ 30, 0 ≤ k ≤ 9

对于70%的数据1 ≤ T ≤ 100, 1 ≤ x ≤ 1000, 0 ≤ k ≤ 9

对于100%的数据1 ≤ T ≤ 1000, 1 ≤ x ≤ 1000000000000000000, 0 ≤ k ≤ 9

输出

对于每组数据,输出一个整数表示答案。

样例输入
2
3 1
7 6
样例输出
3
-1
#include<iostream>
#include<cstdio>
#include<cstring>
#include<ctime>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; int main()
{
long long ans,a,b,i,j,T,x,k,cnt;
bool flag;
scanf("%lld",&T);
while(T--){
scanf("%lld%lld",&x,&k);
if(k==) {
printf("%lld\n",x);
continue;
}
ans=;flag=false;cnt=;
for(i=x;i>;i-=){
cnt++;
if(cnt>) break;
if(ans==k) {
printf("%lld\n",i);flag=true;
break;
}
ans=ans*i%;
}
if(!flag) printf("-1\n");
} return ;
}