Advertisement
madalinaradu

FAI-pb 4 inf, sup

Nov 9th, 2018
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.86 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. int estePrim(int n)
  5. {
  6.     int k,prim;
  7.     /*presup ca nr este prim*/
  8.     prim = 1;
  9.     for(k=2; k<=sqrt(n)&&prim ==1; k++)
  10.     {
  11.         if(n%k ==0)
  12.         {
  13.             prim=0;
  14.         }
  15.     }
  16.     return(prim);
  17. }
  18. /*returneaza nr de divizori ai lui n si in d retinem valorile divizorilor */
  19. int calculeazaDivizori(int n, int d[])
  20. {
  21.     int k;
  22.     int nrDiv=0;
  23.     for(k=1; k<=(n/2); k++)
  24.     {
  25.         if(n%k ==0)
  26.         {
  27.             d[nrDiv]=k;
  28.             nrDiv++;
  29.         }
  30.     }
  31.     d[nrDiv]=n;
  32.     nrDiv++;
  33.     return nrDiv;
  34. }
  35.  
  36. int cmmdc(int a,int b)
  37. {
  38.     int rest;
  39.     do
  40.     {
  41.         rest=a%b;
  42.         a=b;
  43.         b=rest;
  44.     }
  45.     while (rest!=0);
  46.  
  47.     return a;
  48. }
  49.  
  50. int cmmmc(int a, int b)
  51. {
  52.     return ((a*b)/cmmdc(a,b));
  53. }
  54.  
  55.  
  56. int main()
  57. {
  58.     int k,n,m,i,j,liberPatrate;
  59.     int d[100];//retinem divizorii
  60.     int nrDivizori; //va retine numarul de divizori
  61.  
  62.  
  63.     printf("n= ");
  64.     scanf("%d",&n);
  65.     m=n;//salvam nr citit in m.
  66.  
  67.     if (estePrim(n)==1)
  68.     {
  69.         printf("nr este prim\n");
  70.     }
  71.     else
  72.     {
  73.         printf("nr nu este prim\n");
  74.  
  75.         nrDivizori=calculeazaDivizori(n,d);
  76.  
  77.  
  78.  
  79.         // de afisat divizorii
  80.  
  81.         i=2;
  82.         liberPatrate=1;
  83.         do
  84.         {
  85.             k=0;
  86.             while (n%i==0)
  87.             {
  88.                 n=n/i;
  89.                 k++;
  90.  
  91.                 if (k>0)
  92.                 {
  93.                     printf("%d^%d *",i,k);
  94.                     if (k>=2)
  95.                     {
  96.                         liberPatrate=0;
  97.                     }
  98.                 }
  99.             }
  100.             i++;
  101.         }
  102.         while (n!=1);
  103.         n=m;//restauram nr initial.
  104.  
  105.         if (liberPatrate==1)
  106.         {
  107.             printf("\n%d este liber de patrate\n",n);
  108.         }
  109.         else
  110.         {
  111.             printf("\n%d nu este liber de patrate\n",n);
  112.  
  113.         }
  114.  
  115.     }
  116.  
  117.     printf("Tabela infimum\n");
  118.     printf("%3c",'^');
  119.     for (i=0; i<nrDivizori; i++)
  120.     {
  121.         printf("%3d",d[i]);
  122.  
  123.     }
  124.     printf("\n");
  125.  
  126.     for(i=0; i<nrDivizori; i++)
  127.     {
  128.         printf("%3d",d[i]);
  129.         for(j=0; j<nrDivizori; j++)
  130.         {
  131.             printf("%3d",cmmdc(d[i],d[j]));
  132.         }
  133.         printf("\n");
  134.     }
  135.     printf("\n");
  136.     printf("\ntabela supremum\n");
  137.     printf("%3c",'V');
  138.     for (i=0; i<nrDivizori; i++)
  139.     {
  140.         printf("%3d",d[i]);
  141.  
  142.     }
  143.     printf("\n");
  144.  
  145.     for(i=0; i<nrDivizori; i++)
  146.     {
  147.         printf("%3d",d[i]);
  148.         for(j=0; j<nrDivizori; j++)
  149.         {
  150.             printf("%3d",cmmmc(d[i],d[j]));
  151.         }
  152.         printf("\n");
  153.     }
  154.     printf("\n");
  155.  
  156.     if (liberPatrate==1)
  157.     {
  158.         for(i=0; i<nrDivizori; i++)
  159.  
  160.         printf("Complementul lui %d este %d \n",d[i],cmmmc(n,d[i])/d[i]);
  161.  
  162.     }
  163.  
  164.  
  165.  
  166.  
  167.  
  168.     return(0);
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement