Problema #3612 F_p-numar_bac
Un număr natural nenul se numește p-număr dacă are aceeași paritate cu suma divizorilor săi pozitivi. Exemplu: 10 și 25 sunt p-numere (10 are aceeași paritate cu 18=1+2+5+10, iar 25 are aceeași paritate cu 31=1+5+25).
Cerința
Subprogramul kpn, are trei parametri, a, b și k, în această ordine, prin care primește câte un număr natural din intervalul [1,105] (a≤b). Subprogramul returnează cel de al k-lea p-număr din intervalul [a,b] sau -1, dacă nu există cel puțin k astfel de numere în acest interval.
Scrieți definiția completă a subprogramului.
Exemplu
Dacă a=27, b=50 și k=3, atunci subprogramul returnează 34.
Important
Soluția propusă va conține definiția funcției cerute. Prezența în soluție a altor instrucțiuni poate duce erori de compilare sau de execuție care vor avea ca efect depunctarea soluției.
Răspunsuri la întrebare
Răspuns de
1
Răspuns:
#include <iostream>
using namespace std;
int kpn(int a, int b,int k)
{
int s, ok=-1;
if(a>b)
swap(a,b);
for (int i=a ; i<=b ; i++) // punem in for intervalul [a,b]
{
s=1+i; // pentru eficienta
for(int j=2 ; j<=i/2 ; j++)
{
if(i%j==0)
s+=j; // s+=i e acelasi lucru ca s=s+i
}
if(i%2==s%2) // verificam daca este p-numar
k--;
if(k==0) // cand k atinge 0 inseamna ca am gasit p-numarul necesar
{
ok=i;
break;
}
}
return ok;
}
Scuze.. e de 60 de puncte, mi a inceput ora.. Trebuie facuta mai eficienta dar sper ca te am ajutat in mare.
Explicație:
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ă