GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Matriz de coprimos em c

programação
Tags: #<Tag:0x00007f9d227f9bc8>

#1

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;
}