Я знаю, что есть много тем по этому поводу в разных форумах тоже, но моя проблема заключается в следующем:Проект Эйлера 7 в C
Q 1. Для Эйлера задачи 7 (нахождение 10001st прайм) это мой код, который я думал самостоятельно.
#include <stdio.h>
int main()
{
int i,j,k=0,m=0,num;
for(i=1;m<10001;i++)
{
k=0;
for(j=2;j<i;j++)
{
if(i%j!=0)
k++;
}
if(k+2==i)
{
m++;
num=i;
}
}
printf("%d %d",num,m);
}
Эта проблема должна отображать десятитысячный премьер (м < 10001), но она отображает 10001st прайм, почему это?
Я не знаю, почему ваша программа делает то, что она делает, но Project Euler - это решение «умнее», а не «сложнее», вот несколько советов о поиске простых чисел от простого к сложному: 1) 'j' только нужно проверить до 'j * j <= i', как только вы пройдете этот момент, вы проверили каждый потенциальный делитель. 2) запустите 'j' в 3, а затем увеличьте' j' на 2, вам не нужно проверять каждый четный номер. 3) избавиться от 'm', просто продолжайте со следующего' i', когда вы найдете 'i% j == 0'. 4) Узнайте о [seives] (http://en.wikipedia.org/wiki/Sieve_of_Atkin) и используйте его. –
Ну, вы можете использовать индукцию. Покажите, что он работает для 'm
kay