Se consideră un număr natural N
care este par.
Cerința
Să se determine cel mai mic număr natural impar M
care are același număr de divizori ca și N
.
Date de intrare
Programul citește de la tastatură numărul N
.
Date de ieșire
Programul va afișa pe ecran cel mai mic număr natural impar M
care are același număr de divizori ca și N
.
Restricții și precizări
1 ≤ N ≤ 1 000 000 000
și este par- Se garantează că
M
va fi mai mic decât2 000 000 000
Exemplu
Intrare
360
Ieșire
3465
Explicație
360
are 24
de divizori. Cel mai mic număr impar care are tot 24
de divizori este 3465
.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema NrDiv:
#include <bits/stdc++.h>
using namespace std;
int t[] = {0, 3,5,7,11,13,17,19,23};
int c[] = {0,15,7,6, 4, 2, 2, 2, 2};
int st[12], n, nrdiv, x;
long long nrImpar;
int d[12];
void Citire()
{
cin >> x;
}
void NrDivizori()
{
int i;
nrdiv = 0;
for (i = 1; i * i < x; ++i)
if (x % i == 0) nrdiv += 2;
if (i * i == x) nrdiv++;
}
inline bool Valid(int top)
{
d[top] = d[top - 1] * (1 + st[top]);
if (d[top] <= nrdiv) return true;
return false;
}
inline int Putt(int a, int k)
{
int i, x = 1;
for (i = 1; i <= k; ++i)
x *= a;
return x;
}
inline void UpdateSol(int top)
{
int i;
long long w = 1;
for (i = 1; i <= top; ++i)
w *= Putt(t[i], st[i]);
nrImpar = min(nrImpar, w);
}
inline void Back()
{
bool cand;
int top;
d[0] = 1;
top = 1;
st[top] = 0;
while (top > 0)
{
cand = false;
while (!cand && st[top] < c[top])
{
st[top]++;
cand = Valid(top);
}
if (!cand) top--;
else if (d[top] == nrdiv) UpdateSol(top);
else if (top < 8) st[++top] = 0;
}
}
int main()
{
nrImpar = 2000000000;
Citire();
NrDivizori();
Back();
cout << nrImpar << "\n";
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #2247 NrDiv
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2247 NrDiv de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!