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
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;
}
}
#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
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;
}
#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
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Istorie,
9 ani în urmă
Limba română,
9 ani în urmă