题目描述
给定两个正整数 n 和 k,你可以进行以下两种操作任意次(包括零次):
- 选择一个整数 x 满足 0≤x<k,将 n 变为 k⋅n+x。该操作每次花费 a 枚金币。每次选择的整数 x 可以不同。
- 将 n 变为 ⌊nk⌋。该操作每次花费 b 枚金币。其中 ⌊nk⌋ 表示小于等于 nk 的最大整数。
给定正整数 m,求将 n 变为 m 的倍数最少需要花费几枚金币。请注意:0 是任何正整数的倍数。
输入格式
第一行输入一个整数 T表示测试数据组数。
对于每组测试数据,输入一行五个正整数 n,k,m,a,b。
输出格式
每组数据输出一行一个整数,代表将 n 变为 m 的倍数最少需要花费几枚金币。如果无法完成该目标,输出 −1。
输入样例1
3
101 4 207 3 5
114 514 19 19 810
1 1 3 1 1
输出样例1
11
0
-1
样例2见下载文件
对于第一组样例数据,一开始 n=101,最优操作如下:
- 首先进行一次第二种操作,将 n 变为 ⌊n4⌋=25,花费 5 枚金币。
- 接下来进行一次第一种操作,选择 x=3,将 n 变为 4⋅n+3=103,花费 3 枚金币。
- 接下来进行一次第一种操作,选择 x=2,将 n 变为 4⋅n+2=414,花费 3 枚金币。
- 此时 414=2×207,满足 n 是 m 的倍数。共花费 5+3+3=11 枚金币。
对于第二组样例数据,进行两次第二种操作将 n 变为 0。共花费 1+1=2 枚金币。
对于第三组样例数据,因为 n=114=6×19 已经是 m 的倍数,因此无需进行任何操作。共花费 0 枚金币。
数据范围
对于30%的数据,n,k,m≤10
对于60%的数据,T≤1000,k,m≤103
对于所有数据,1≤T≤105,1≤n≤1018,1≤k,m,a,b≤109。