Escreva, em linguagem C, um programa que leia uma sequência de números inteiros positivos maiores que 1 e os salva em um vetor. O programa deve ler um número inteiro n que representa o número de elementos da sequência, depois em seguida efetua a leitura dos n números e os salvar em um vetor v. Assumir que o tamanho máximo da sequência é 50. O programa deve então imprimir um quadrado de n linhas por n colunas onde em cada posição (i; j) (onde i = 0; : : : ; n-1 e j = 0; : : : ; n-1) deste quadrado deverá ser impresso 1 caso os números v e v[j] sejam coprimos e 0 caso contrário. Os pares de números v e v[j] são coprimos se não há nenhum divisor d > 1 que seja comum a ambos. Por exemplo 15 e 8 são coprimos, pois os divisores de 8, que são 2, 4 e 8, não são divisores de 15.
O programa abaixo não está funcionando do modo que deveria, está imprimindo 1 em todas as posições da matriz:
[HASHTAG]#include[/HASHTAG] <stdio.h>
[HASHTAG]#include[/HASHTAG] <stdlib.h>
int main()
{
int n;
int i=0,j=0;
int x,y,z=0;
int v[50];
int GCD(int a, int b);
//ler numero de elementos
printf("Digite o numero desejado de elementos da sequencia: \n");
scanf("%d",&n);
int vet[50];
//ler elementos
for (i=0; i<n; i++)
{
printf("Insira os elementos da sequencia [%d]:",i);
scanf("%d",&v);
}
printf("\n");
int quad[50][50];
//juntar 2 vetores(nesse caso, o mesmo) numa matriz
for(y = 0; y<n; y++)
{
for(x = 0; x<n; x++)
{
if(z < n)
{
quad[x][y] = v[z];
z++;
}
else if(z >= n)
{
quad[x][y] = v[(z-n)];
z++;
}
}
}
//imprimir quadrado nxn
for(y=0; y<n; y++)
{
for(x = 0; x<n; x++)
{
if(GCD(i+1,j+1)==1)
quad[j]=1;
else
quad[j]=0;
printf("%2d ",quad[j]);
}
printf("\n");
}
printf("\n");
system("PAUSE");
return 0;
}
//verificar coprimos
int GCD(int a,int b)
{
int aux,resto;
if (a<b)
{
aux=a;
a=b;
b=aux;
}
if ((a % b)==0) resto=b;
while ((a % b) != 0)
{
resto=a-b*(a/b);
a=b;
b=resto;
}
return resto;
}