Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C] На интервале (1000, 9999) найти все простые числа


Автор: anad 27.9.2006, 19:20
Помогите решить задачу на си!
На интервале (1000, 9999) найти все простые числа, каждое из которых обладает тем свойством, что сумма первой и второй цифр в записи этого числа равна сумме третьей и четвертой цифр.

Автор: darkart 27.9.2006, 21:08
Код

#include<stdio.h>
#include<conio.h>
int IsSymple(int num)
//функция проверки на простоту
{
    if(num<2||num%2==0)//если число четное
    {
        return 0;
    }
    else
    {
        for(int i=3;i<num/2;i=i+2)
            if(num%i==0)//если нашли делитель
                return 0;
        return 1;//число num-простое
    }
}
int CheckSum(int num)
//функция проверки суммы
{
    if(num%10+(num%100)/10==(num/100)%10+num/1000)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
int main()
{
    printf("Result:\n");
    for(int i=1000;i<10000;i++)
        if(CheckSum(i)&&IsSymple(i))
            printf("%d, ",i);

    getch();
    return 0;
}

Автор: Oleg_Ci 1.10.2006, 08:48
Код

#include <stdio.h>

void main()
{
    int kol = 0, begin_j, begin_x, end, name, j, x, i, flag;
    for ( name=0; name<=18; name++  )
    {
        if ( name<10 )
            { begin_j = 1; begin_x = 0; end = name; }
        else { begin_j = begin_x = name-9; end = 9; }

        for ( j = begin_j; j <= end; j++ )
            for ( x = begin_x; x <= end; x++, kol++ )
            {
                int n = j*1000 + (name-j)*100 + x*10 + name-x;
                flag = 1;
                for ( i=2; i<n-1; i++ )
                {
                  if ( n%i == 0 )
                  {
                    kol--;
                    flag = 0;
                    break;
                  }
                }
                if ( flag ) printf("%d\n", n );
            }
    }
    printf("\n\n\nKol-vo number :  %d\n\n\n", kol );
    getchar();
}


Автор: Cr@$h 4.10.2006, 05:46

 ! 
Cr@$h
На будущее, прошу обратить внимания на мои замачания:

Модератор: Пожалуйста, один топик - один вопрос.
Модератор: Название темы должно отражать ее суть!

M
Cr@$h
Выделено из темы "[Turbo C] Вычисление косинуса угла треугольника, используя TPoint, TTriangle и функ. Leng".

Автор: anad 11.10.2006, 18:41
Мне надо без функций и процедур!

Добавлено @ 18:43 
Олег4, количество чисел в конце пишет:56. А самих чисел выдает меньше. Что-то не правильно...

Автор: Dov 11.10.2006, 21:59
Код
#include <stdio.h>

int main()
{
    int q = 0;
    int i, j;

    printf("Result:\n");

    for(i = 1000; i < 10000; i++)
    {
        for(j = 2; j * 2 < i; j++)
            if(i % j == 0)
                break;

        if(j * 2 >= i && (i % 10 + i / 10 % 10 == i / 100 % 10 + i / 1000))
            printf("\n%d. %d ", ++q, i);
    }
        
    return 0;
}

Автор: maxim1000 11.10.2006, 22:55
Цитата(Dov @  11.10.2006,  20:59 Найти цитируемый пост)
        for(j = 2; j * 2 < i; j++)
            if(i % j == 0)
                break;

если это проверка на простоту, то не совсем удачная, т.к. она нигде не сохраняет результат своей работы
желательно бы ещё флажок сделать какой-нибудь...
P.S.
условие окончания достаточно j*j<i - итераций будет меньше...

Автор: Dov 11.10.2006, 23:33
maxim1000, человек попроще просит, попроще и получает.
А с этим j*j<i  согласен, хотя в данном случае это не принципиально.

Автор: anad 12.10.2006, 00:05
 мне только непонятно что такое break?

Автор: Cr@$h 12.10.2006, 00:17
Выход из текущего цикла.

Автор: Oleg_Ci 12.10.2006, 15:47
 smile 
Код

#include <stdio.h>

int main(int argc, char *argv[] )
{
    int count = 1, i, j;

    for ( i = 1000; i<10000; i++ )
        if( i % 10 + i / 10 % 10 == i / 100 % 10 + i / 1000 )    
            for ( j=2; i%j; j++ )
                    if ( j == i-1 )    printf("%2d%6d\n",count++, i );

    getchar();
    return 0;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)