#include <stdio.h>
#include <math.h>
// #define LIMIT 600851475143
int isP(long i);
void run();
// 6857
int main()
{
//int i = 6857;
//printf("%d\n", isP(i));
run();
}
void run()
{
long LIMIT = 600851475143;
// 3, 5
// under 1000
long i, largest =1, temp=0;
for(i=3; i<=775147; i+=2)
{
temp = ((LIMIT/i)*i);
if(LIMIT == temp)
if(isP(i)==1)
largest = i;
}
printf("%d\n",largest);
}
int isP(long i)
{
long j;
for(j=3; j<= i/2; j+=2)
if(i == (i/j)*j)
return 0;
return 1;
}
興味深い問題に出会いました。上記のように、このコードは LIMIT の最大の素数を計算するように設計されています。上記のプログラムは 29 という答えを出しましたが、これは正しくありません。
一方、奇跡的に、LIMIT 値を (長いと宣言する代わりに) 定義すると、正しい値である 6857 が得られました。
誰かが理由を理解するのを手伝ってもらえますか? どうもありがとう!