Risipa de key_press | Programare

Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Risipa de key_press | Programare - Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Numar prim

Testaţi dacă un număr natural dat este prim.

Analiza Programului

Prin număr prim înţelegem orice număr natural care se împarte doar la 1 şi la el însuşi; se considera ca 2 este cel mai mic număr prim.

Rezolvarea in C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Exercise15
{
    class Program
    {
        static void Main(string[] args)
        {
            //numarul care va fi testat
            int number;
            //presupunem ca un numar este prim
            bool prime = true;
            //contor
            int i = 2;            

            //citeste numarul de la tastura
            number = int.Parse(Console.ReadLine());

            //verifica daca numarul este divizibil cu numerele cuprinse intre 2 si jumatatea lui
            while (i <= number/2)
            {
                //daca are divizor
                if (number % i == 0)
                    prime = false;
                i += 1;
            }

            if (prime)
                Console.WriteLine("Numarul {0} este prim", number);
            else
                Console.WriteLine("Numarul {0} nu este prim", number);

            Console.Read();

        }
    }
}

Rezolvarea in C++

//the header conio, which include library functions for performing "console input and output"
#include <conio.h>
//the header iostream, which supports the C++ I/O system
#include <iostream>
//tells the compiler to use the std namespace
using namespace std;

//begin program execution
int main()
{
    int number;
    cout<<"Introduceti numarul"<<endl;
    cin>>number;
    
    //assume the number is prime
    bool prime = true;

    //counter
    int i = 2;

    //check
    while(i <= number/2)
    {
        if(number % i == 0)
            prime = false;
        i += 1;
    }

    if(prime)
        cout<<"Numarul "<<number<<" este prim"<<endl;
    else
        cout<<"Numarul "<<number<<" nu este prim"<<endl;

    //terminates main and return value to the calling process
    return 0;
}
Category: Uncategorized
  • Morosanu Dan says:

    Nu vreau sa o fac eu pe expertul, dar de ce nu incerci o optimizare ceva ?
    1. Bine ar fi fost sa fi luat o variabila, in care, inainte de while, sa fi stocat valoarea (number / 2) : pentru a nu face acea impartire la fiecare iteratie ( mai ales ca number dupa ce e citit, devine “constant” ).
    2. Cand verifici daca restul impartirii lui number la i este 0, ar fi mers un break ceva … Sa zicem ca vrei sa verifici numarul 15738 daca este prim ; atata timp cat restul impartirii lui 15738 la 2 este 0, ce rost are sa mai faci inca 7868 iteratii, cand puteai sa dai un break, sau sa afisezi direct mesajul ca numarul nu este prim, si terminai cu return ?

    January 5, 2012 at 7:59 pm
    • zeltera says:

      Asa-i. Inmarea majoritate a exemplelor folosite sunt facute optimizari.

      O parte dintre exercitii/solutii au fost luate de pe forumuri sau au fost propuse de elevi (studenti) si asta este nivelul caruia i se adreseaza. Tot ceea ce spui tu este corect, si iti multumesc pentru corectura.

      using System;
      
      namespace Exercise15
      {
          class Program
          {
              static void Main(string[] args)
              {
                  //numarul care va fi testat
                  int number;
                  //presupunem ca un numar este prim
                  bool prime = true;
                  //contor
                  int i = 2;            
      
                  //citeste numarul de la tastura
                  number = int.Parse(Console.ReadLine());
                  int half = number/2;  //valoarea pana la care verific divizibilitatea
                  //verifica daca numarul este divizibil cu numerele cuprinse intre 2 si jumatatea lui
                  while (i <= half)
                  {
                      //daca are divizor
                      if (number % i == 0) {
                          prime = false; 
                          break;  //numarul are cel putin un divior, deci nu este prim, asa ca intrerup verificarea
                      }
                      i += 1;
                  }
      
                  if (prime)
                      Console.WriteLine("Numarul {0} este prim", number);
                  else
                      Console.WriteLine("Numarul {0} nu este prim", number);
      
                  Console.Read();
      
              }
          }
      }
      January 5, 2012 at 10:16 pm

Your email address will not be published. Required fields are marked *

*