Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
4 / 4 / 2
Регистрация: 03.01.2012
Сообщений: 28

Конгруэнтный генератор

21.09.2012, 15:56. Показов 3805. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите. Проблема в следующем: нужно написать программу, которая генерирует псевдослучайную двоичную последовательность используя за основу алгоритм конгруэнтного генератора.
X(i)=(X(i-1)*A + B) mod M
Числа a,b,m заданные
Проблема в том, что в задании указано "двоичная" последовательность, а при роботе алгоритма у меня выходят десятичные значения.
Возможно кто то сталкивался с подобным? Или я не правильно генерирую, или задание указано не точно, или что то не до то. Заранее спасибо.
П.С. не знал в какой раздел поместить, код на Java
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.09.2012, 15:56
Ответы с готовыми решениями:

Линейный конгруэнтный генератор
Здраствуйте. В универе задание: запрограммировать линейный конгруэнтный генератор на java. Не могу сообразить с какой стороны за это...

Мультипликативный конгруэнтный генератор
Нужно написать мультипликативный конгруэнтный генератор, параметры x0=911, a=27,диапозон значений 0-4294967296 Добавлено через 25...

Шифрование методом квадратичный конгруэнтный генератор
Добрый день! Ребята, спасайте. Нужно написать программу которая шифрует методом квадратичный конгруэнтный генератор. Параметра...

4
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
21.09.2012, 17:23
А можете привести A, B и M? А то концы с концами не сходятся.
0
4 / 4 / 2
Регистрация: 03.01.2012
Сообщений: 28
21.09.2012, 20:25  [ТС]
Цитата Сообщение от Skipy Посмотреть сообщение
А можете привести A, B и M? А то концы с концами не сходятся.
а=106
b=1283
m=6075

длинна последовательности равна 10 000.

Добавлено через 2 часа 50 минут
Есть пример генератора на Haskell. Здесь реализован генерация и проверка, помогите возможно с переводом на Java.
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import Array
import Data.List
import Data.Int
import Data.Map (Map)
import qualified Data.Map as Map
import Data.Bits
 
getBit :: Int64 -> Int64      
getBit x = x .&. 1
         
xs = (iterate f x0)
    where x0 = 0
          f x = (x*a + b) `mod` m
          a = 9301
          b = 49297
          m = 233281
          
bs = take 30000 $ map getBit xs
 
num = length bs
 
t1 = (fromIntegral num_of_ones) / (fromIntegral num)
    where num_of_ones = length (filter (== 1) bs)
           
t2 = (fromIntegral num_of_dif) / (fromIntegral (num-1))
    where num_of_dif = length $ filter isDif pairs
          isDif (a,b)= a /= b
          pairs = zip bs (tail bs)
 
t3 n = foldl add empty wnds
    where empty = array (0,top) [(i,0) | i <- [0..top]]
          top = 2^n - 1
          wnds = windowed n bs
          add arr wnd = let idx = indexOf wnd
                            newVal = arr!idx + 1
                        in arr // [(idx, newVal)]
 
indexOf wnd = foldl fromBin 0 wnd
fromBin a x = (shiftL a 1) + x
 
t4 xs = n
    where n = head (filter (newAllPred xs) [1..len])
          len = length xs
          
newAllPred xs i = all allEquals ms
    where ms = Map.elems _map
          _map = foldl' (\m (k,v) -> Map.insertWith (++) k [v] m) Map.empty pttrns
          pttrns = map (\(p,v) -> (indexOf p, v)) (makePttrns i xs)
 
mpred pttrns pttrn = allEquals $ map (\(_,val) -> val) (filter (\(p,val) -> pttrn == p) pttrns)
 
allEquals []     = True
allEquals (x:xs) = all (== x) xs
          
        
makePttrns n list = if (length take_np1_list) < (n+1) 
                    then []
                    else ((take n list),list!!n):(makePttrns n (tail list))
    where take_np1_list = take (n+1) list      
          
windowed :: Int -> [a] -> [[a]]
windowed n list = if (length take_n_list) /= n 
                  then []
                  else take_n_list:(windowed n (tail list))
    where take_n_list = take n list
 
main = do
          putStrLn $ show t1 
          putStrLn $ show t2
          putStrLn $ show (t3 3)
          putStrLn $ show $ t4 bs
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4311 / 2103 / 431
Регистрация: 19.07.2009
Сообщений: 3,189
Записей в блоге: 24
23.09.2012, 17:32
Дошёл до t3 и надоело писать. Всё равно явский код получается каким-то искалеченным.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package SeqGen;
 
import java.util.Iterator;
 
public class SeqGen {
 
    public static long getBit(long x) { return x&1; }
 
    public static Iterable<Long> xs = new Iterable<Long>() {
        @Override
        public Iterator<Long> iterator() {
            return new Iterator<Long>() {
                private long x = 0;
                public final long a = 9301, b = 49297, m = 233281;
                @Override
                public boolean hasNext() { return true; }
                @Override
                public Long next() { return x = (x*a + b) % m; }
                @Override
                public void remove() {
                    throw new RuntimeException(
                        "How can we remove element from immutable sequence?!");
                }
            };
        }
    };
 
    public static Iterable<Long> bs = new Iterable<Long>() {
        @Override
        public Iterator<Long> iterator() {
            return new Iterator<Long>() {
                private int index = 0;
                private Iterator<Long> x = xs.iterator();
                @Override
                public boolean hasNext() { return index<30000; }
                @Override
                public Long next() {
                    ++index;
                    return getBit(x.next());
                }
                @Override
                public void remove() { x.remove(); }
            };
        }
    };
 
    public static double t1() {
        int num_of_ones = 0, total = 0;
        for(Long i : bs) {
            ++total;
            if(i==1) ++num_of_ones;
        }
        return num_of_ones*1.0 / total;
    }
 
    public static double t2() {
        int num_of_dif = 0, total = 0;
        Iterator<Long> i = bs.iterator();
        long current = i.next();
        while(i.hasNext()) {
            ++total;
            long next_one = i.next();
            if(current != next_one)
                ++ num_of_dif;
            current = next_one;
        }
        return num_of_dif*1.0 / total;
    }
 
    public static void main(String[] args) {
        System.out.println(t1());
        System.out.println(t2());
    }
 
}
Кстати, если есть решение на Haskell, зачем тебе Java?
1
4 / 4 / 2
Регистрация: 03.01.2012
Сообщений: 28
23.09.2012, 20:50  [ТС]
Спасибо, этого вполне достаточно. Просто код нужен именно на Джаве)
Тему можно закрывать. Всем спасибо за вимание!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.09.2012, 20:50
Помогаю со студенческими работами здесь

Линейный конгруэнтный метод
Здравствуйте, В общем нужно написать программу, которая будет считать (картинка прилагается). С разъяснениями пожалуйста. ...

Линейный конгруэнтный метод ГСЧ
Очень нужен код в delphi с комментариями и(или) пояснениями. Пользователь вводит числа, программа генерирует случайное число.

Линейный конгруэнтный генертор псевдослучайных чисел (ГПСЧ)
Помогите пожалуйста сделать программу!) В отдельном модуле определить: подпрограммы для реализации линейного конгруэнтного генератора...

Линейный конгруэнтный метод генерации псевдослучайных чисел. Рекурсия
Товарищи, здравствуйте! Наткнулся на следующую задачу: &quot;Линейный конгруэнтный метод генерации псевдослучайных чисел заключается в...

Конгруэнтный ГПЧ. Задача: подобрать формулу, чтобы на в листбоксе и гистограмме числа распределялись равномерно
Так-то все кошерно работает, только единица выпадает намного чаще. При 100 000-чах прогонов, повторений одного числа может быть по 100 раз...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru