Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2009, 20:54   #1
MAKEDON
The First Person!
Форумчанин
 
Аватар для MAKEDON
 
Регистрация: 07.08.2007
Сообщений: 228
По умолчанию Вывести простые числа

Программа по-идее должна выводить все простые числа от 1 до 1000..но что то не так. В чем проблема?

Код:
#include <stdio.h>
int main(){
	int i,j,a=0;
	for(i=1;i<=1000;i++){
		for(j=1;j<=i;j++){
			if(i%j==0){
				a+=j;
			}	
		}
		if(a-1==i){
			printf("%d ",i);
		}
	}
}
Программа обычно делает то что вы ей сказали сделать, а не то что бы вы хотели, чтобы она сделала.
MAKEDON вне форума Ответить с цитированием
Старый 05.03.2009, 21:18   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Нужно занулять a для каждого i
Код:
#include <stdio.h>
#include <conio.h>

int main(){
int i,j,a;

for(i=1;i<=1000;i++)
 {
  a=0;
  for(j=1;j<=i;j++)
  {
   if(i%j==0)
    {
    a += j;
    }
  }
 if(a-1==i)
   {
    printf("%d ",i);
   }
 }
getch();
return 0;
}
А вообще, имхо конечно, но по-моему удобнее так:
Код:
#include <stdio.h>
#include <conio.h>

int main(){
int i,j;
bool fl;

for(i=1;i<=1000;i++)
 {
  fl = true;
  for(j=2;j<i;j++)
  {
   if(i%j==0)
    {
     fl = false;
     break;
     }
   }
  if(fl)
   {
   printf("%d ",i);
   }
 }
getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 05.03.2009 в 21:20.
Sazary вне форума Ответить с цитированием
Старый 13.06.2010, 12:24   #3
MARine_life
 
Аватар для MARine_life
 
Регистрация: 14.11.2009
Сообщений: 7
По умолчанию

а второй вар не работ
MARine_life вне форума Ответить с цитированием
Старый 13.06.2010, 14:18   #4
dxdy
Пользователь
 
Регистрация: 11.06.2010
Сообщений: 78
По умолчанию

Поиск "шустрого" алгоритма для проверки, что число простое - это дело тонкое, надо немного полистать литературу. В вашем случае - это самый легкий, но нерациональный способ. Можно хотя бы проверять делители числа i в цикле до (i/2+1)
Код:
for(int j = 2; j < (i/2+1); ++j){
            // тело цикла
          }
Я не волшебник, я еще только учусь ٩(๏̯͡๏)۶
dxdy вне форума Ответить с цитированием
Старый 13.06.2010, 14:31   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
проверять делители числа i в цикле до (i/2+1)
а ещё лучше - пока i меньше/равно корню квадратному из проверяемого числа...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простые числа Verochka Помощь студентам 14 02.12.2008 20:30
разложить число на простые множители и вывести результат pakusya Паскаль, Turbo Pascal, PascalABC.NET 6 15.11.2008 03:07
Простые числа werser Помощь студентам 8 18.06.2008 07:24
простые числа Акашаев Нурлан Паскаль, Turbo Pascal, PascalABC.NET 2 05.12.2007 12:23