傳送門
有乙個字串s,記錄了乙個大數,但不知這個大數是多少進製的,只知道這個數在k進製下是k - 1的倍數。現在由你來求出這個最小的進製k。
例如:給出的數是a1a,有a則最少也是11進製,然後發現a1a在22進製下等於4872,4872 mod 21 = 0,並且22是最小的,因此輸出k = 22(大數的表示中a對應10,z對應35)。
input
輸入大數對應的字串s。s的長度小於10^5。
output
輸出對應的進製k,如果在2 - 36範圍內沒有找到對應的解,則輸出no solution。
input示例
a1aoutput示例
22
習題的第一題,是比較好的思路。
雖然本次題目中沒有用到數論的知識。這題目中但是遇到數相關的題目,凡是提到了
k k
以及k−1
' role="presentation">k−1
k−1,就往尤拉公式,費馬小定理上想。
假設s是p進製的數。那麼: sm
od(p
−1) smo
d(p−
1)
=(s[0]∗
pn+s
[1]∗
pn−1
+...
+s[n
−1]∗
p0)m
od(p
−1) =(s
[0]∗
pn+s
[1]∗
pn−1
+...
+s[n
−1]∗
p0)m
od(p
−1
)=(s
[0]+
s[1]
+...
+s[n
−1])
mod(
p−1)
= (s
[0]+
s[1]
+...
+s[n
−1])
mod(
p−1)
因為p%所以判斷各個位數上加起來能否被p-1整除就好了,若能整除答案就是p。(p−1
) p%(
p−1)
= 1。
#include
#include
#include
#include
using
namespace
std;
#define max_int(a,b) (a>b)? a:b
char s[100005];
int char2int(char a)
int main ()
}if(flag == 0)
printf("no solution\n");
}
費馬小定理! 51NOD 1116 K進製下的大數
1116 k進製下的大數 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 收藏關注 有乙個字串s,記錄了乙個大數,但不知這個大數是多少進製的,只知道這個數在k進製下是k 1的倍數。現在由你來求出這個最小的進製k。例如 給出的數是a1a,有a則最少也是11進製,然後...
51nod1116 K進製下的大數
1116 k進製下的大數 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 有乙個字串s,記錄了乙個大數,但不知這個大數是多少進製的,只知道這個數在k進製下是k 1的倍數。現在由你來求出這個最小的進製k。例如 給出的數是a1a,有a則最少也是11進製,然後發現a1a...
51 Nod 1116 K進製下的大數
1116 k進製下的大數 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 有乙個字串s,記錄了乙個大數,但不知這個大數是多少進製的,只知道這個數在k進製下是k 1的倍數。現在由你來求出這個最小的進製k。例如 給出的數是a1a,有a則最少也是11進製,然後發現a1a...