Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 2

#include <stdio.

h>
#include<malloc.h>
#include <stdlib.h>
//sa se insereze dupa fiecare e;lement neprim divizorii sai primi
int prim(int x)
{
if (x <= 1 || x % 2 == 0 && x > 2)
return 0;
for (int d = 3; d*d <= x; d += 2)
if (x%d == 0)
return 0;
return 1;
}

int Divizorprimi(int x)
{
for (int i = 2; i <= x / 2; i++)
{
if (x % i == 0 && prim(i))
//printf_s("%d", i);
return i;
}
}
int nrdivprimi(int x)
{
int nr = 0;
if (x % 2 == 0)
nr++;
if (prim(x / 2))
nr++;
for (int d = 3; d*d <= x; d=d+2)
{
if (prim(d) == 1)
nr++;
if (prim(x / d) == 1)
nr++;
}
return nr;
}

int* Insert(int *vector, int *n)


{
int i = 0;
for (i = 0; i < *n; i++)
{
int nr = nrdivprimi(vector[i]);
*n = *n + nr;
vector = (int *)realloc(vector, *n * sizeof(int));
for (int j = *n - 1; j > i; j--)
{
if (prim(vector[j]) == 0)
vector[j] = vector[j - nr];
}
for (int j = i + nr; j > i; j--)
{
if (prim(vector[j]) == 0)
vector[j] = Divizorprimi(vector[j]);
}
i = i + nr;
}
return vector;
}
int main()
{
int *vector, n;
printf_s(" n este: ");
scanf_s("%d ", &n);
vector = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++)
scanf_s("%d ", &vector[i]);
vector = Insert(vector, &n);
for (int i = 0; i < n; i++)
printf_s("%d ", vector[i]);
free(vector);
system("pause");
return 0;
}

You might also like