Решение уравнений. Обработка целых данных на С++

Ответить
pymba
Сообщения: 25
Зарегистрирован: 07 дек 2008, 11:25

Помогите,пожалуйста,решить задачу.

Два простых числа называются «близнецами», если они отличаются друг от друга на 2 (таковы, например, числа 41 и 43). Напечатать все пары «близнецов» из отрезка [a; b] и количество таких пар.
Не знаю как вывести кол-во пар(((

Код: Выделить всё

#include<iostream.h>
#include<math.h>
#include<conio.h>
void main()
{
clrscr();
int a,b;
cout<<"Vvedite a,b:\n";
cin>>a>>b;
for(int x=a;x<b-1;x++)
{
if((x)&&(x+2))
{
cout<<x<<x+2<<endl;
}
}
getch();
}
Albor
Сообщения: 491
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

Я так понимаю, в интервале от a до b нужно выбрать простые числа и предыдущее сравнивать с последующим, если их разность равна двум, то напечатать эту пару и увеличить счётчик пар. Условие if((x)&&(x+2)) при любом х не равном нулю даст истину, поэтому будет печататься всё подряд.
pymba
Сообщения: 25
Зарегистрирован: 07 дек 2008, 11:25

а как правильно написать,не подскажете?((
Albor
Сообщения: 491
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

В цикле: взяли число из диапазона, определили простое ли, если да, то запомнили как текущее и перешли к следующему, если следующее простое, то проверяем разность с текущим, если 2, то печатаем и увеличиваем счётчик, если нет, то "следующее" делаем "текущим" и идем дальше по диапазону. Итак, нам нужны переменные: iCurrent - текущее простое число, iNext - следующее за ним простое, iCnt - счётчик, функция определения простоты числа (можно найти на этом форуме). Теперь думаем, собираем и если что-то не получается то показываем код и задаём вопросы.
ociro
Сообщения: 9
Зарегистрирован: 12 ноя 2008, 19:36

// ex22.cpp : Defines the entry point for the console application.
// особенность примера: интервал может задаватьcя как с нечетного так и с четного числа..
// идея такая... тебе остается только додумать оформление.. "на вкус и цвет товарища нет")

#include <iostream>
#include <math.h>
#include <conio.h>
using namespace std;

int main()
{
int a, b, counter;
cout << "please enter the easy number a and b\n";
cin >> a >> b;
counter=0;
if (a%2!=0)
{ cout << a << endl;
while (a%2!=0 && a < b-1)
{
a+=2;
cout << a << endl;
counter++;
}
cout << endl << "kol-vo par\t" << (counter+1)/2 << endl;
}
else
{
a+=1;
cout << a << endl;
while (a%2!=0 && a < b-1)
{
a+=2;
cout << a << endl;
counter++;
}
cout << endl << "kol-vo par\t" << counter/2 << endl;
}
getch();
return 0;
}
Albor
Сообщения: 491
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

ociro, задача на простые числа, а ты выводишь нечётные. Это не одно и то же.
ociro
Сообщения: 9
Зарегистрирован: 12 ноя 2008, 19:36

сорри...тогда может так?)
#include <iostream>
#include <math.h>
#include <conio.h>
using namespace std;

int main()
{
int a, b,y,x,fl, counter;
cout << "please enter the easy number a and b (a>1)\n";
cin >> a >> b;
counter=0;
x=1;
for (a; a<b; a++)
{
fl = 0;
for (int i=2; i<a; i++)
if ((a%i)==0)
fl++;
if (fl==0)
y=a;
if (y-x==2)
{
counter++;
cout << " " << x << " " << y << endl;
}
x=y;
}
cout << "kol-vo par: " << counter+1/2 << endl;
getch();
return 0;
}
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

for (int i=2; i<a; i++)
Достаточно проверить до sqrt(a)

if ((a%i)==0)
fl++;
Если число делится хоть на что-то - дальше считать количество его делителей уже бессмысленно. Можно сразу сделать break;

А вообще - пишете функцию определения простоты числа (скажем, issimple), а потом делаете один-единственный цикл:

Код: Выделить всё

for (i=a; i<b-2; i++)
  {if (issimple(i) && issimple(i+2))
    cout << i << " " << i+2<<endl;}
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Ответить