2014-02-13 3 views
0
import random 
def samplegcd (n, size): 
""" repeats the following " size " times : Choose two 
random integers , n bits long each (between 1 to 2**n -1). 
Checks if they are relatively prime . 
Computes the frequency and the derived approximation to pi.""" 
count =0 
    for i in range (0, size): 
    if gcd (random.randint(1,2**n - 1) , 
     random.randint(1,2**n - 1)) ==1: 
    count += 1 # the dreaded += 
return count /size , (6* size/count)**0.5 

Почему random.randint(1,2**n - 1) возвращает n бит длинного целого числа, а не просто целое число?Почему random.randint (1,2 ** n - 1) возвращает целое число n бит, а не просто целое число?

+4

"символизировать"? Что ты имеешь в виду? И что такое «целое число»? – user2357112

+0

, потому что это то, как работают системы с номерами 2-го уровня? –

+0

Почему 'random.randint (1,2 ** n - 1)' не целое, а его длина в битах? – user7777777

ответ

2
random.randint(1,2**n - 1) 

Это возвращает случайное целое число в диапазоне от 1 до 2^n-1. Не имеет ничего общего с python. Это математический вопрос. Если мы хотим генерировать n-разрядное целое число (целое число, которое имеет не более n бит), тогда мы должны сгенерировать число в диапазоне от 1 до MAX_N_BIT_VALUE. Какое максимальное значение может быть установлено в n бит? Это 2^n-1.

Максимальное 2-битное значение равно 11 (двоичное) = 3 (десятичное) = 2^2-1.

Максимальное 3-битное значение равно 111 (двоичное) = 7 (десятичное) = 2^3-1.

Максимальное 4-битное значение 1111 (двоичное) = 15 (десятичное) = 2^4-1.

+0

Можете ли вы объяснить концепцию n-разрядного целого числа - в случае n = 2 значение max_n_bit_val равно 4: из-за 00,10,01,11? – user7777777

+1

Максимальное 2-битное значение равно 11 (двоичное) = 3 (десятичное) = 2^2-1 –

+0

- это '2 ** n - 1' преобразование в десятичное максимальное n-битное значение? – user7777777

Смежные вопросы