Informatică, întrebare adresată de ZOUKYE, 9 ani în urmă

e consideră o secvenţă de N numere naturale nenule.
Cerinţă

Determinaţi numărul de divizori pentru fiecare număr din secvenţa dată.
Date de intrare

Fişierul de intrare nrdiv.in conţine pe prima linie numărul natural N, care reprezintă numărul de valori din secvenţă. Pe următoarele N linii se află cele N numere naturale din secvenţă, câte un număr pe o linie.
Date de ieşire

Fişierul de ieşire nrdiv.out va conţine N linii. Pe linia i va fi scris numărul de divizori ai celui de-al i-lea număr din secvenţă (considerând ordinea din fişierul de intrare).
Restricţii

• 1 ≤ N ≤ 50
• 1 ≤ numerele din secvenţă ≤ 1013

Răspunsuri la întrebare

Răspuns de ardyarde
1
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    int N,i,j,k=0,nr;
    ifstream fin("nrdiv.in");
    ofstream fout("nrdiv.out");
    fin>>N;
    for(i=1;i<=N;i++)
    {
      fin>>nr;
      for(j=1;j<=nr;j++)
        if(nr%j==0)
        k++;
      fout<<k<<endl;
      k=0;
    }
}
Răspuns de express
0
// Solutie de 50 puncte
#include <fstream>
using namespace std;
long long n, x, j, i, d, nr;
int main()
{
    ifstream f("nrdiv.in");
    ofstream g("nrdiv.out");
f >> n;
for(j = 1; j <= n; j ++)
{
    f >> x;
    nr = 0;
        for(d = 1; d * d < x; d ++)
  if(x % d == 0) nr = nr + 2;
      if(d * d == x) nr ++;
     g << nr << "\n";
}
f.close();
g.close();
return 0;
}

Solutie 100 puncte
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

bool c[3500001];
int pr[300001],p;
long long prput[300001];
int main()
{
    freopen("nrdiv.in","r",stdin);
    freopen("nrdiv.out","w",stdout);
    int n,i,j,e,nrdiv;
    long long x,y;
    for (i=2;i<=3500000;i++) c[i]=1;
    for (i=2;i<=2000;i++) if (c[i]==1) for (j=i*i;j<=3500000;j+=i) c[j]=0;
    for (i=2;i<=3500000;i++) if (c[i]==1) {pr[++p]=i;
                                       prput[p]=1LL*i*i;}
    scanf("%d",&n);
    for (j=1;j<=n;j++) {scanf("%lld",&x);
                    i=1;e=0;nrdiv=1;
                    while (x!=1) {while (x%pr[i]==0) { x/=pr[i];
                                                       e++;
                                                     }
                                  if (e!=0) {
                                             nrdiv=nrdiv*(e+1);
                                             e=0;
                                            }
                                        else {y=pr[i]*pr[i];
                                              if (prput[i]>x) { nrdiv*=2;
                                                                x=1;
                                                              }
                                             }
                                  i++;
                                  }
                    printf("%d\n",nrdiv);
                    }
return 0;
}

Alte întrebări interesante