我用python写的费马小定理,呜呜呜,还是超时了,全网没搜到python的解放,真的是很卡速度呀,但是思想还是一样的,弄了好长时间,python的话一定要注意这个数据类型,经常会有小数的出现,而且dp用python真的很慢。
#2018堆的计数
N = 100010
MOD = 1e9 + 9
n=0
f=[0]*N
s=[0]*N
fact=[0]*N
vv=[0]*N
def fm(x,k):
# print(x,end=' ')
# print(k)
res = 1;
while (k):
if (k % 2 == 1) :
res = int(res)* int(x) % int(MOD)
x = int(x) * int(x) % int(MOD)
k=int(k / 2);
# print(int(res))
return int(res)
def init():
fact[0] = vv[0] = 1;
for i in range(1,n+1) :
fact[i] = int(fact[i - 1] * i % MOD)
vv[i] = fm(fact[i], int(MOD - 2));
#print(fact[i])
def sl(a,b) :
return int(fact[a] * vv[b] % int(MOD) * int(vv[a - b]) % int(MOD))
if __name__ == '__main__':
n=int(input())
init()
#print(fact)
# print('***************************************************************************')
#print(inv)
lst=[]
ans=n
for i in range(n):
lst.append(ans)
ans=ans-1
for i in lst:
s[i] = 1;
if (i * 2 <= n) :
s[i] += int(s[i * 2])
if (i * 2 + 1 <= n):
s[i] += int(s[i * 2 + 1])
for i in lst:
f[i] = 1;
if (i * 2 <= n):
f[i] = int(f[i * 2])
if (i * 2 + 1 <= n):
f[i] = int(int(f[i]) * sl(s[i] - 1, s[i * 2]) % int(MOD) * f[i * 2 + 1] % int(MOD))
print(int(f[1]))
#385202505
蓝桥杯的数论的基础题目了,简单的就只有这两道,这道就是考的字符串的拼接,字符串的分割以及这个全排列的应用。
from itertools import permutations for i in permutations('123456789'): i=''.join(i) print(i)
from itertools import permutations
import math
import time
import os
n=int(input())
ans=0
for i in permutations('123456789'):
i=''.join(i)
for j in range(len(str(n))):
a=int(i[:j+1])
b_temp=(n-a)*int(i[-1])%10#运用了数学知识,取到被除数的最后一位
if b_temp==0:#如果是0的话不符合条件
continue
b_i=i.index(str(b_temp))#找到符合条件的位数
if b_i<=j or b_i>=8:
continue
b = int(i[j+1:b_i+1])#分割被除数
c = int(i[b_i+1:])#输出
if a+b/c == n:
ans+=1
print(ans)
正好有空就多练习一下,顺便也熟悉python的用法,据小道消息说17周考试,呜呜呜,所以时间更要抓紧了。