ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #4231  
Старый 10.11.2009, 17:44
Аватар для Fata1ex
Fata1ex
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме:
4205500

Репутация: 930


По умолчанию

Цитата:
т.е. не меняя ничего все работает??
я написал, как работает у меня
 
Ответить с цитированием

  #4232  
Старый 10.11.2009, 17:48
Аватар для Fata1ex
Fata1ex
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме:
4205500

Репутация: 930


По умолчанию

Цитата:
Сообщение от winflip  
Как объявить двух и трёхмерный динамический массив(используя операцию new)? Например, одномерный массив
int * a = new int[10];
2x
Код:
int** arr = new int[Rows];
for (int i = 0; i < Rows; i++) {
arr[i] = new int[Columns];
}
3x

аналогично, только три цикла
 
Ответить с цитированием

  #4233  
Старый 10.11.2009, 18:12
Аватар для winflip
winflip
Познающий
Регистрация: 13.05.2009
Сообщений: 40
Провел на форуме:
91842

Репутация: 1
По умолчанию

Реализация алгоритма теста на простоту Миллера-Рабина. В чём ошибка.
Код:
#include <iostream>
#include <cmath>
int is_prime(int m){
	using namespace std;
	int r = 1000;
	int t = m-1;
	int s = 0;
	bool b = true;
	if(m%2==0){
		return false;
	}
	if(m==1){
		return false;
	}
	if(m==2){
		return true;
	}
	while(t%2==0 || b){
		b = false;
		s++;
		t=t/2;
	}
	for(int i=1;i<r+1;i++){
		int a = 2+rand()%(m-2);
		int x = int(float(pow(float(a),float(t))))%m;
		if((x==1)||(x==m-1)){
			continue;
		}
		for(int j=1;j<s;j++){
			x=int(float(pow(float(x),2)))%m;
			if(x==1){
				return false;
			}
			if(x==m-1){
				continue;
			}
		}
	}
	return true;
}
int main(){
	using namespace std;
	int a,b;
	cin >> a >> b;
	for(int i=a;i<b;i++){
		if(is_prime(i)){
			cout << i << " ";
		}
	}
	cin >> a;
	return 0;
}
P.S Алгоритм, с которого я писал есть на википедии, страница так и называется тест миллера-рабина
 
Ответить с цитированием

  #4234  
Старый 10.11.2009, 18:14
Аватар для Fata1ex
Fata1ex
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме:
4205500

Репутация: 930


По умолчанию

что пишет компилятор?
Код:
int is_prime(int m)
попробуй сделать bool, а нет int
 
Ответить с цитированием

  #4235  
Старый 10.11.2009, 18:29
Аватар для winflip
winflip
Познающий
Регистрация: 13.05.2009
Сообщений: 40
Провел на форуме:
91842

Репутация: 1
По умолчанию

Разницы нет, компиляция проходит и программа работает, но неправильно, выводит 15(оно составное) и не выводит 17(простое), если a=3, а b=20.
 
Ответить с цитированием

  #4236  
Старый 10.11.2009, 18:39
Аватар для Fata1ex
Fata1ex
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме:
4205500

Репутация: 930


По умолчанию

тогда с++ тут ни при чем - ошибка в алгоритме
 
Ответить с цитированием

  #4237  
Старый 10.11.2009, 19:06
Аватар для winflip
winflip
Познающий
Регистрация: 13.05.2009
Сообщений: 40
Провел на форуме:
91842

Репутация: 1
По умолчанию

Да это я и так понял, сам алгоритм правильный, но я неправильно его реализовал(немного). Просто не могу найти ошибки. Более подходящего места вопросу не нашёл)
 
Ответить с цитированием

  #4238  
Старый 10.11.2009, 19:25
Аватар для Irdis
Irdis
Участник форума
Регистрация: 06.02.2006
Сообщений: 177
Провел на форуме:
1576821

Репутация: 88
Отправить сообщение для Irdis с помощью ICQ
По умолчанию

1)
Цитата:
Выбрать случайное a в диапазоне [2, m − 2]
а у вас [2,m-1]
http://www.cplusplus.com/reference/clibrary/cstdlib/rand/
2)
Цитата:
(*) вернуть составное
вернуть вероятно простое
а (*) у вас нет
3)
Цитата:
если x = m − 1 то перейти на следующую итерацию цикла А
а у вас на следующую итерацию цикла "для r = 1 .. s − 1"

Последний раз редактировалось Irdis; 10.11.2009 в 19:37..
 
Ответить с цитированием

  #4239  
Старый 10.11.2009, 20:18
Аватар для winflip
winflip
Познающий
Регистрация: 13.05.2009
Сообщений: 40
Провел на форуме:
91842

Репутация: 1
По умолчанию

Честно говоря, на счёт rand, я сделал, а вот
Цитата:
2)
Цитата:
(*) вернуть составное
вернуть вероятно простое

а (*) у вас нет
Return false;
Это по-вашему что?
А 3 пункт я и вовсе не понял
 
Ответить с цитированием

  #4240  
Старый 10.11.2009, 20:28
Аватар для Irdis
Irdis
Участник форума
Регистрация: 06.02.2006
Сообщений: 177
Провел на форуме:
1576821

Репутация: 88
Отправить сообщение для Irdis с помощью ICQ
По умолчанию

Цитата:
Return false;
это ошибка при компиляции XD
=======================
написав continue произойдёт следующее
Код:
		for(int j=1;j<s;j++){
			x=int(float(pow(float(x),2)))%m;
			if(x==1){
				return false;
			}
			if(x==m-1){
		continue;// попадаем в цикл for(int  j=1;j<s;j++) а надо во внешний for(int i=1;i<r+1;i++){

			}
                  return false;//что то я не видел, что бы это у вас стояло
		}

Последний раз редактировалось Irdis; 10.11.2009 в 20:37..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Часто задаваемые вопросы по MySQL Серый PHP, PERL, MySQL, JavaScript 5 28.12.2006 18:26
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Форумы 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ