Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <sstream>
- #include <string>
- #include <vector>
- using namespace std;
- unsigned int nwd(unsigned int a, unsigned int b) {
- while( a!=b ) {
- if( a>b ) a-=b;
- else b-=a;
- }
- return a;
- }
- int main()
- {
- unsigned int pierwsza_wartosc=0, rekord_nwd=0, poczatek=0, koniec=1, rekord_dlugosci=0;
- ifstream plik("liczby.txt");
- vector<unsigned int> ciag_liczb;
- if( plik.is_open() ) { //zapelnij wektor liczbami
- while( !plik.eof() ) {
- string linia;
- getline(plik,linia);
- unsigned int liczba;
- istringstream(linia) >> liczba;
- ciag_liczb.push_back(liczba);
- }
- }
- plik.close();
- while( koniec!=ciag_liczb.size()-1 ) { //Wykonoj dopoki nie dotarto do konca
- unsigned int temp_rekord_nwd=0, temp_nwd=ciag_liczb[poczatek];
- for( unsigned int a=poczatek; a<=koniec; a++ ) { //wylicz nwd z zakresu do temp_nwd
- temp_nwd=nwd(temp_nwd, ciag_liczb[a]);
- if( temp_nwd>1 && poczatek!=a ) temp_rekord_nwd=temp_nwd;
- }
- if( temp_nwd>1 ) {//jezeli nwd porownywanego ciagu wieksze od 1, poszerz zakres
- if( koniec-poczatek>rekord_dlugosci ) { //Przy okazji sprawdz czy zaktualizowac rekord
- rekord_dlugosci=koniec-poczatek;
- pierwsza_wartosc=ciag_liczb[poczatek];
- rekord_nwd=temp_rekord_nwd;
- }
- koniec++;
- }
- else { //W przeciwnym razie zacznij przesowac zakres naprzod
- poczatek++;
- koniec=poczatek+1;
- }
- }
- cout << "Pierwsza wartosc: " << pierwsza_wartosc << ", Dlugosc ciagu: " << rekord_dlugosci+1 << ", Najwyzsza wartosc NWD: " << rekord_nwd << "." << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement