/* LISTA 1 (PARTE 2), MA-553/A – Exercício 1 (MONOGRAFIA) */
/* Pedro Thiago Ezequiel de Andrade (RA 063696) */
/* Rafael Lucas Gregório D’Oliveira (RA 063824) */
/* O código abaixo implementado em C busca primos p com a+1<p<r, sendo a e r
parâmetros dados, tais que ap-1-1 é divisível por p2. O algoritmo é bem simples, consiste
em identificar quais que são todos os números primos menores que r por meio do Crivo
de Erastóstenes e verificar quais dentre os primos no intervalo pedido são tais que seu
quadrado dividem ap-1-1. Testamos valores de a entre 2 e 20000 com r=40000. O único
resultado encontrado foi para a=3 e r>11, indicando que 121 divide 310-1 e que a
propriedade pedida não ocorre para outros números dentre os limites testados. Curioso.
*/
#include <stdio.h>
#include <math.h>
int main() {
int a , r , i , j , inicio , l1 , l2 , p , livre=0; //a, r são como descritos no enunciado; l1 e l2
são os limites dos índices do vetor P (abaixo) para os quais se testará se o primo satisfaz
a propriedade pedida; livre indica a posição no vetor R.
int P[100000], R[100]; // P[i] é 1 se 2*i+3 for primo ; R guarda os valores de p que são
satisfatórios dado certo a.
printf("Fornecer valores de 'a' e 'r' na ordem: ");
scanf("%d %d", &a, &r);
//Preenchimento do crivo de Erastóstenes
for (i=0 ; i<(r-3)/2 ; i++)
P[i]=1;
for (i=0 ; i<(sqrt(r)-3)/2 ; i++)
if (P[i]==1) {
inicio=((2*i+3)*(2*i+3)-3)/2;
for(j=inicio; j<(r-3)/2 ; j+=(2*i+3) )
P[j]=0;
}
// fim do preenchimento do crivo, todos os primos menores que r foram identificados.
if(a%2==1) l1=(a-1)/2; else l1=(a/2);
l2=(r-3)/2;
// l1 e l2 representam os limites dos índices em P que devem ser utilizados para que
somente primos p em a+1<p<r sejam testados.
// Verificação dos primos no intervalos considerado, armazenando-os em R:
for(i=l1;i<l2;i++) {
p=2*i+3; // p : impar na posição 'i' no vetor P.
if( (P[i]==1) && ( ((int)pow(a,(p-1))-1)%(p*p)==0) ) {
R[livre]=p;
livre++;
}
}
// retornando os primos satisfatórios para o valor de a considerado:
for(i=0;i<livre;i++)
printf("%d ", R[i]);
}
Download

/* LISTA 1 (PARTE 2), MA-553/A – Exercício 1 (MONOGRAFIA