The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"В ядро Linux может быть включен диспетчер реального времени"
Отправлено dot_kkursor, 22-Окт-09 00:18 
>да это не критика. :)
>операция деления выполняется примерно в 4 раза медленнее операции умножения. ну и
>остаток от деления - тоже. поэтому надо избегать медленной операции, поэтому
>нужен массив с true/false, который будет указывать на принадлежность к простому
>числу, или нет. ;)

Каких же размеров должен быть этот массив... предлагаете на каждое число по элементу? Но всё равно же придётся тогда определять, простое оно или нет, с помощью цикла с делением с остатком... А как иначе?
А торможение заметно очень. Первые несколько десятков тысяч чисел перебирает очень шустро, а потом всё медленнее и медленнее...

Ошибок ещё нашёл логических несколько в коде, неправильно считало, вот с исправлением:
// (c) .kkursor, 2009
// This code is licensed under WTFPL v.2, available at http://sam.zoy.org/wtfpl/

#include <stdio.h>
#define true 1
#define false 0

unsigned long int input (void) {
  unsigned long int a=0;
  printf("Prime number sum calculator\nCopyright (c) .kkursor 2009\nThis code is licensed under WTFPLv2.\n\n");
  while (a == 0) {
        printf("Enter the maximum number you want to use in finding and summing prime numbers: ");
      scanf("%ld", &a);
      printf("\n");
  }
  return a;
}

unsigned long int find_prime (unsigned long int number) // find the following prime number
{
  unsigned long int i, current_num, remain;
  current_num = number+1;
  while (true != false)
  {
     for (i=2; i<current_num; i++)
     {
       remain = current_num%i;
       if (remain == 0) // the number is not prime
           break;
     }
     if (remain != 0)
       break;
     else
       current_num++;
  }
  return current_num;
}

int main (void) {
  unsigned long int limit, i=0, sum=0, current_number;
  limit = input();
  if (limit < 2)
  {
      printf("There are no prime numbers in this range.\n");
      return 0;
  }
  printf("Calculating...\n");
  current_number = 1;
  while (true != false)
  {
  current_number = find_prime (current_number);
    if (current_number >= limit)
          break;
    printf ("Found prime number: %ld\n", current_number);
    sum += current_number;
  }
  printf("The sum of prime numbers from 1 to %ld is %ld\n", limit, sum);
  return 1;
}

Но всё равно, блин, не получается большие числа считать... 225263 - последнее простое число, которое может прибавиться, не превратив сумму неизвестно во что...

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру