我用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周考试,呜呜呜,所以时间更要抓紧了。