1. Những thứ cần chuẩn bị
1. Quần dù thể dục
- Hoặc quần nào càng nhẹ càng tốt, đừng dài quá vướng chân
2. Kính mát
- tateyama leo khoảng từ sáng trưa đến 4,5h chiều nên rất nắng
3. Kem chống nắng
- Nhớ giữa các chặng leo bôi lại do kem chống nắng ko giữ đc lâu
4. Giày leo núi
- Ko đc mang giày mới
- Giày đế thiệt nhẹ, đừng nên chọn loại giày đế cao su
- Giày ko thấm nước
5. Áo mưa nhỏ gọn
6. Nước (chừng 2lít)
- Tateyama đi giữa các chặng ko bán nước nên phải chuẩn bị trước
- Lên đỉnh cũng có bán nhưng nhiều người mua rất nhanh hết, ko đến lượt mình
7. Đồ ăn nhẹ (bánh, chocolate)
2. Ko cần chuẩn bị những thứ sau (Tateyama không giống Hakusan hay Fujisan)
- Gậy
- Đèn pin
- Túi ngủ
3. 1 số hình ảnh
Friday, July 25, 2014
[JAIST] All names
- English: Japan Advanced Institute of Science and Technology
- Kanji: 北陸先端科学技術大学院大学
- Hiragana: ほくりくせんたんかがくぎじゅつだいがくいんだいがく
- Katakana: ホクリクセンタンカガクギジュツダイガクインダイガク
- Kanji: 北陸先端科学技術大学院大学
- Hiragana: ほくりくせんたんかがくぎじゅつだいがくいんだいがく
- Katakana: ホクリクセンタンカガクギジュツダイガクインダイガク
Thursday, July 10, 2014
[Research] How to generate n-bit large prime
Way 1: slow
import random
import math
import sys
def rabinMiller(n):
s = n-1
t = 0
while s&1 == 0:
s = s/2
t +=1
k = 0
while k<128:
a = random.randrange(2,n-1)
#a^s is computationally infeasible. we need a more intelligent approach
#v = (a**s)%n
#python's core math module can do modular exponentiation
v = pow(a,s,n) #where values are (num,exp,mod)
if v != 1:
i=0
while v != (n-1):
if i == t-1:
return False
else:
i = i+1
v = (v**2)%n
k+=2
return True
def isPrime(n):
#lowPrimes is all primes (sans 2, which is covered by the bitwise and operator)
#under 1000. taking n modulo each lowPrime allows us to remove a huge chunk
#of composite numbers from our potential pool without resorting to Rabin-Miller
lowPrimes = [3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97
,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179
,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269
,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367
,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461
,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571
,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661
,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773
,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883
,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997]
if (n >= 3):
if (n&1 != 0):
for p in lowPrimes:
if (n == p):
return True
if (n % p == 0):
return False
return rabinMiller(n)
return False
def generateLargePrime(k):
#k is the desired bit length
r=100*(math.log(k,2)+1) #number of attempts max
r_ = r
while r>0:
#randrange is mersenne twister and is completely deterministic
#unusable for serious crypto purposes
n = random.randrange(2**(k-1),2**(k))
r-=1
if isPrime(n) == True:
return n
return "Failure after "+`r_` + " tries."
print generateLargePrime(1024)
Way 2: < n bits (The prime is less than n bits)
from random import randrange, getrandbits
from itertools import repeat
def isProbablePrime(n, t = 7):
def isComposite(a):
#Check if n is composite
if pow(a, d, n) == 1:
return False
for i in range(s):
if pow(a, 2 ** i * d, n) == n - 1:
return False
return True
assert n > 0
if n < 3:
return [False, False, True][n]
elif not n & 1:
return False
else:
s, d = 0, n - 1
while not d & 1:
s += 1
d >>= 1
for _ in repeat(None, t):
if isComposite(randrange(2, n)):
return False
return True
def getPrime(n):
#Get a n-bit prime
p = getrandbits(n)
while not isProbablePrime(p):
p = getrandbits(n)
return p
Subscribe to:
Posts (Atom)