>да это не критика. :)
>операция деления выполняется примерно в 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 - последнее простое число, которое может прибавиться, не превратив сумму неизвестно во что...