sagemath
入门
简单基本概念
基本数学运算符
** ^ 指数
%取余
/ 约分
//取整
附:算数二元运算符优先级
括号>指数>乘法除法>加法、 减法
常见数学函数
内置pi, e
向上取整 floor 向下取整 ceil
sqrt 求平方根
gcd 求最大公约数,lcm 求最小公倍数
sin cos tan …(sagemath完全处理pi,不是数的计算值)
divmod()同时获得商和余数
factor()计算整数的素因数分解
max ,min ,abs(绝对值),log(),ln(),log(x,b)
factor()求阶乘
…
基于密码使用sage
基本数论函数
求逆元
inverse_mod(x,y):在模y下x的逆元
拓展欧几里得
xgcd(x,y): 返回值(a,b,c) —>a=bx+cy
欧拉函数
euler_phi(n)
中国剩余定理
crt([x1,x2,x3,x4],[x11,x22,x33,x44])
即求{x≡x1(modx11)x≡x1(modx11)x≡x1(modx11)x≡x1(mo ...
连分数训练
[CRYPTOCTF] DoRSA
题目:
from Crypto.Util.number import *
from math import gcd
from flag import FLAG
#获取e, n_1, n_2
def keygen(nbit, dbit):
assert 2*dbit < nbit
while True:
u, v = getRandomNBitInteger(dbit), getRandomNBitInteger(nbit // 2 - dbit)
p = u * v + 1
if isPrime(p):
while True:
x, y = getRandomNBitInteger(dbit), getRandomNBitInteger(nbit // 2 - dbit)
q = u * y + 1
r = x * y + 1
i ...
连分数
研究wiener之前先了解来连分数
连分数
简单连分数
a0是任意整数,ai是正整数(i>0):部分商 [a0,a1,a2…] 几里得计算每次计算出来的商
有限连分数
定理:任何有理数都可以唯一的表示成有限连分数;任何有限连分数都是一个有理数
[a0,a1,…,an]=[a0,…,am,[a m+1,…,an] ]
给定有限连分数,求倒数
如果a0=0,就把0去掉:[a1,…an]
如果a0!=0,就在前面补上0:[0,a0,…an]
密码数论基础
基础数论
# &用于取位操作,例如(x&1)的结果是将十进制数(x)转换成二进制数之后再取最后一位
def fastPower(int base, int exponent) {
int sum = 1;
while (exponent != 0) {
#&取二进制末尾
if ((exponent & 1) != 0) {
#实现2^8*2^2*2^1
sum *= base;
}
# 对指数进行移位 1011->0101->0010->0000
exponent = expnonent >> 1;
# 让base的次幂以2的倍数增长 实现base->base^2->base^4->base^8
base *= base;
}
return sum;
}
2.折半
def quik_power(in ...