The OpenNET Project / Index page

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



"В ядро Linux может быть включен диспетчер реального времени"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Отдельный RSS теперь доступен для каждого обсуждения в форуме и каждого минипортала.
. "В ядро Linux может быть включен диспетчер реального времени" +/
Сообщение от dot_kkursor (ok), 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 - последнее простое число, которое может прибавиться, не превратив сумму неизвестно во что...

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
В ядро Linux может быть включен диспетчер реального времени, opennews, 20-Окт-09, 21:42  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



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

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