Advertisement
Guest User

Untitled

a guest
Nov 17th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.91 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('f')
  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. def F(x):
  40.   #sigma = 3
  41.   #mu = 0
  42.   #return 1/(sigma*math.sqrt(2*math.pi)) * math.exp(-1*pow(x-mu,2)/2*pow(sigma,2))
  43.   #return 1-math.exp(-2*x*x)
  44.   return x
  45.  
  46. counters=array.array('i', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
  47.  
  48. firstNum=0 #первая часть числителя без n
  49. secondNum=X0 #вторая часть числителя и знаменателя до возведения в квадрат
  50. denum=pow(X0, 2) #первая часть знаменателя
  51. prev = X0
  52. for l in range (0, count-1):
  53.         Xn=(d*multiply(massiv,massiv)+multiply(massiv,massivA)+c)%m
  54.         #Xn=d*X0^2+a*X0+c(mod m)
  55.         massivXn.append(Xn/pow(2,31))
  56.         if (l == (count-1)):
  57.               firstNum = firstNum + Xn*X0    
  58.         else:
  59.               firstNum = firstNum + prev*Xn
  60.         secondNum = secondNum + Xn
  61.         denum = denum + pow(Xn, 2)
  62.         print (Xn/pow(2,31))
  63.         cellnumber = 0;
  64.         for cc in range(1,10):
  65.           if (Xn/pow(2,31)) > cc/10:
  66.                 cellnumber = cellnumber+1; #переход к ячейке номер cc
  67.           else:
  68.                 break
  69.         counters[cellnumber] = counters[cellnumber] + 1 #увеличение счётчика попаданий в категорию
  70.         prev = Xn
  71.         for n in range (0,15):
  72.           if Xn > 10:
  73.                 massiv[n]=int(Xn%10)
  74.           else:
  75.                 massiv[n]=Xn
  76.                 break
  77.           Xn=int(Xn/10)
  78.  
  79. print(counters)
  80.  
  81. sum = 0
  82. for j in range (1, 11):
  83.   sum = sum + (pow(counters[j-1],2))/k
  84.   print("Сумма равна ", sum)
  85. hi = sum/count - count #формула для расчёта хи-квадрат
  86.  
  87. print("Хи-квадрат для этого распределения равно ",hi)
  88. series = (count*firstNum-pow(secondNum, 2))/(count*denum-pow(secondNum, 2))
  89. print("C = ",series )
  90.  
  91. massivV=array.array('f')
  92.  
  93. for t in range(0, 5):
  94.   locmax = 0
  95.   for s in range(t*5+1, t*5+5):
  96.     locmax = max(locmax, massivXn[s])
  97.   massivV.append(locmax)
  98.  
  99.  
  100.  
  101. massivXn = sorted(massivXn)
  102. print(massivXn)
  103. Kplus = 1/(count-1)-F(massivXn[0])
  104. Kmin = F(massivXn[0])
  105. for z in range(2, count):
  106.     Kplus = max(Kplus, (z/(count-1)-F(massivXn[z-1])))
  107.     Kmin = max(Kmin, (F(massivXn[z-1]) - (z-1)/(count-1)))
  108. print("К+ статистика = ", math.sqrt(count-1)*Kplus)
  109. print("К- статистика = ", math.sqrt(count-1)*Kmin)
  110.  
  111. print("Максимумы в шестерках ", massivV)
  112. massivV = sorted(massivV)
  113. KplusT = 1/4-pow(massivV[0], 6)
  114. KminT = pow(massivV[0], 6)
  115. for z in range(2, 4):
  116.     KplusT = max(KplusT, (z/(5)-pow(massivV[z-1], 6)))
  117.     KminT = max(KminT, (pow(massivV[z-1],6) - (z-1)/(5)))
  118. print("Кt+ статистика = ", math.sqrt(5)*KplusT)
  119. print("Кt- статистика = ", math.sqrt(5)*KminT)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement