Informatică, întrebare adresată de vipilanac, 8 ani în urmă

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 xAd3l1N
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