¡Urgente! ! ! ! ! ! ! ! Maestros de problemas del lenguaje C, por favor entren.
Para atraer nuevas ideas, utilicé la forma más sencilla y eficiente de implementarla:
/* Entre los números primos menores que 10, existe una secuencia aritmética compuesta por 3, 5, y 7,
* Entre los números primos menores que 30, existe una secuencia aritmética compuesta por 11, 17, 23 y 29.
* Intente encontrar la secuencia aritmética más grande compuesta de números primos en el intervalo (es decir, la secuencia aritmética contiene la mayor cantidad de números primos) e imprímala.
*/
#include
#define MIN_NUMBER 100
#define MAX_NUMBER 1000
// Determina si el número es primo. Si no es un número primo, devuelve 0.
int is_prime(int iTest)
{
if (2 > iTest || iTest % 2 = = 0)
{
devolver 0;
}
int i = 0;
para ( i = 3; i < iPrueba; i += 2)
{
si (iPrueba % i == 0)
{
devuelve 0 ;
}
}
devuelve 1;
}
// p>
int get_prime_seq(int firstP, int iStep)
{
int iLen = 0;
for (iLen = 0; iLen < MAX_NUMBER - MIN_NUMBER; iLen++ )
{
if (0 == is_prime(firstP + iStep * iLen))
{
return iLen; p>
}
}
return 0;
}
// Devuelve el "primo máximo lista de números" comenzando desde firstP La longitud de
int get_max_prime_seq(int firstP, int *pStep)
{
int iLen = 0;
int iStep = 1 ;
int iTmpStep = 1;
for (iTmpStep = 1; iTmpStep < MAX_NUMBER - MIN_NUMBER; iTmpStep++)
{
int iTmpLen = get_prime_seq(firstP, iTmpStep);
if (iTmpLen > iLen)
{
iLen = iTmpLen; p>
iStep = iTmpStep;
}
}
*pStep = iStep;
devuelve iLen;
} p>
int main(int argc, char* argv[])
{
int iP = MIN_NUMBER // Registra el primer primo; número de "lista de números primos máximos"
int
iLen = 0; // Registra la longitud de la "lista de números primos máximos"
int iStep = 1 // Registra la tolerancia de la "lista de números primos máximos"
int; i = 0; p>
int iTmpP = 0; // enumeración p
for (iTmpP = MIN_NUMBER; iTmpP < MAX_NUMBER; iTmpP++)
{
int iTmpStep = 0; // Paso temporal
int iTmpLen = 0; // Len temporal
iTmpLen = get_max_prime_seq(iTmpP, &iTmpStep);
if (iTmpLen > iLen)
{
iP = iTmpP;
iLen = iTmpLen;
iStep = iTmpStep;
}
}
for (i = 0; i < iLen; i++)
{
printf ("%d\ n", iP + iStep * i);
}
devuelve 0;
}
Sin estricto depurando, el resultado es:
199
409
619
829
1039
1249
1459
1669
1879
2089