Advertisement
Guest User

M=32^2-1

a guest
Nov 12th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.18 KB | None | 0 0
  1. import math
  2. import array
  3. m=pow(2,31)-1 #модуль
  4. a=4096 #
  5. a1=4096 #
  6. d=4096 #
  7. c=150889 #не 0, иначе - мультипликативный
  8. X0=57956 #
  9. k=0.1 #вероятность попадания в категорию
  10. count=int(input("Сколько случайных чисел нужно? "))
  11. massiv=array.array('i', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
  12.  
  13. for n in range (0,15):
  14.         if X0 > 10:
  15.                 massiv[n]=int(X0%10) #разбиение на разряды
  16.         else:
  17.                 massiv[n]=X0
  18.                 break
  19.         X0=int(X0/10)
  20.  
  21. massivA=array.array('i', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
  22. massivXn=array.array('q', [0])
  23.  
  24. for w in range (0,15):
  25.         if a > 10:
  26.                 massivA[w]=int(a%10) #разбиение на разряды
  27.         else:
  28.                 massivA[w]=a
  29.                 break
  30.         a=int(a/10)
  31.  
  32. def multiply (x, a):
  33.         sum = 0
  34.         for i in range (0,15):
  35.                 for j in range (0,15):
  36.                         sum=sum+x[i]*a[j]*pow(10,i+j) #перемножение X0 и a
  37.         return sum
  38.  
  39. counters=array.array('i', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
  40.  
  41. for l in range (0, count-1):
  42.         Xn=(d*multiply(massiv,massiv)+multiply(massiv,massivA)+c)%m #Xn=d*X0^2+a*X0+c(mod m)
  43.         print (Xn/pow(2,31))
  44.         cellnumber = 0;
  45.         for cc in range(1,10):
  46.           if (Xn/pow(2,31)) > cc/10:
  47.                 cellnumber = cellnumber+1; #переход к ячейке номер cc
  48.           else:
  49.                 break
  50.         counters[cellnumber] = counters[cellnumber] + 1 #увеличение счётчика попаданий в категорию
  51.  
  52.         for n in range (0,15):
  53.           if Xn > 10:
  54.                 massiv[n]=int(Xn%10)
  55.           else:
  56.                 massiv[n]=Xn
  57.                 break
  58.           Xn=int(Xn/10)
  59.  
  60. print(counters)
  61.  
  62. sum = 0
  63. for j in range (1, 11):
  64.   sum = sum + (pow(counters[j-1],2))/k
  65.   print("Сумма равна ", sum)
  66. hi = sum/count - count #формула для расчёта хи-квадрат
  67.  
  68. print("Хи-квадрат для этого распределения равно ",hi)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement