algorytm, liczba pierwsza
Ostatnio zmodyfikowano 2017-05-19 23:44
usmiech |
a moze dzialajacy kod rozwiaze te watpliwosci.... :) » 2013-01-22 17:21:19 kod sprawdza czy wpisana przez uzytkownika liczba jest liczba pierwsza..., nastepnie podaje dzielniki.. a w koncu podaje kolejna liczbe pierwsza..... :) #include "stdafx.h" #include <iostream> #include <cmath> using namespace std;
bool isPrime( int n ); void getDivisors( int n ); void getNextPrime( int n );
int MIN_PRIME = 2;
int main() { int userInput; while( true ) { cout << "Enter a num (0 = Exit) and press ENTER: "; cin >> userInput; if( userInput == 0 ) break; if( isPrime( userInput ) ) cout << "num is prime" << endl; else cout << "num is not prime" << endl; getDivisors( userInput ); cout << endl; userInput++; getNextPrime( userInput ); cout << endl; } system( "PAUSE" ); return 0; }
bool isPrime( int i_numberToCheck ) { int limit = sqrt( double( i_numberToCheck ) ); for( int i = MIN_PRIME; i <= limit; i++ ) { if( i_numberToCheck % i == 0 ) return false; } return true; }
void getDivisors( int i_numberToCheck ) { int sqrt_of_n = sqrt( double( i_numberToCheck ) ); for( int i = MIN_PRIME; i <= sqrt_of_n; i++ ) { if( i_numberToCheck % i == 0 ) { cout << i << ", "; getDivisors( i_numberToCheck / i ); return; } } cout << i_numberToCheck; }
void getNextPrime( int i_numberToCheck ) { int limit = sqrt( double( i_numberToCheck ) ); for( int i = MIN_PRIME; i <= limit; i++ ) { if( i_numberToCheck % i == 0 ) { getNextPrime( ++i_numberToCheck ); return; } } cout << "Next Prime: " << i_numberToCheck; } milej zabawy :) w sumie lubie zabawe na funkcjach.... i jeszcze cos ... C++ ucze sie od 2 tygodni ...:) ucze sie krotko, ale wiem, ze podstawa to dobry algorytm...... |
|
gsmx98 |
Witam » 2017-05-19 23:44:59 mam problem bo nie za bardzo wiem jak sprawdzać odprowadzone do tablicy liczby wylosowane. Mam za zadanie napisac program który wylosuje liczby z podanego przedziału no i to mam ale druga czesc to ile z nich to liczby pierwsze :/ kod który gdzieś oszukałem przeanalizowałem i spełnia oczekiwania co do losowania ale nie wiem jak dopisac aby po wylosowaniu nowej liczby system nią sprawdził i jeśli to zadziała to dodaje je do kolejnej liczby pierwszej z przedziału ktoś pomoże ???
#include <time.h> #include <iostream> using namespace std;
int main() { int zakres,*tab,ile_liczb; cout<<"podaj z ilu liczb chcesz losowac : "; cin>>zakres; tab=new int[zakres]; cout<<"podaj ile liczb chcesz losowac z zakresu od 1 do "<<zakres<<" : "; cin>>ile_liczb; time_t t; srand((unsigned) time(&t)); for (int i=0; i <zakres; i++) tab = i+1; for (int i=0; i <ile_liczb; i++) { int k=rand()%zakres; swap (tab, tab[k]); } cout<<"wylosowano:"<<endl; for(int i=0;i<zakres;i++)cout<<tab<<" "; delete [] tab; return 0; }
no i sprawdzacz czy pierwsza ..
bool czy_pierwsza(int n) { if(n<2) return false; //gdy liczba jest mniejsza niż 2 to nie jest pierwszą for(int i=2;i*i<=n;i++) if(n%i==0) return false; //gdy znajdziemy dzielnik, to dana liczba nie jest pierwsza return true; } |
|
1 « 2 » |