problem z petlą - zliczanie dzielników liczb

0

Próbuję napisać program który ma za zadanie podać liczbę dzielników o największej ilości powtórzeń i liczbę powtórzeń tych dzielników. Lecz jak zawsze napotkałem problem ... ; [

#include <iostream>
#include <vector>
#include <conio.h>

using namespace std;

int main()
{
     long long int a, d;
     int N, l = 0;
     vector <int> vec, kr;
     
     cin >> N;

     for(int i = 0; i < N; i++)
     {
          cin >> a;
          
          d = 2;
          while(1)
          {
               if((a % d) == 0)
               {
                    a /= d;
                    vec.push_back(d);
               }
               else
                    d++;
               
               if(a == 1)
                    break;
          }
     }
     
     for(int i = 0; i < vec.size(); i++)
          cout << vec[i] << " | ";
     
     cout << endl;
     
     for(int i = 0; i < vec.size(); i++)
     {
          int k = 0;
          l = vec[i];
          while(1)
          {
               int j = 0;
               
               cout << vec[j] << "$ ";
               if(l == vec[j])
               {
                    k++;
                    vec.erase(vec.begin() + j);
               }
               else
                    j++;
               
               cout << vec[j] << " - " << k << endl;
               if(j = vec.size())
                    break;
          }
          
          for(int j = 0; j < vec.size(); j++)
               cout << vec[j] << " ~ ";
          
          cout << endl;
          kr.push_back(k);
     }
     
     for(int i = 0; i < kr.size(); i++)
          cout << kr[i] << "-";
     
     getch();
     return 0;
}

Tak wygląda mój program ... a problem jest z pętlą która nie wiem czemu ale nie spełnia moich założeń ... ; /

     for(int i = 0; i < vec.size(); i++)
     {
          int k = 0; // zlicza krotnosc liczby 'L' z ciagu
          
          l = vec[i]; // przypisanie wartosci do zmiennej ... wartosc bedzie porownywana z innymi wartosciami ciagu
          while(1) // petla ... podczas ktorej liczba 'L' ma byc porownywana z liczbami w wektorze ...
          { // i gdy funkcja warunkowa bedzie zwracac wartosc 'TRUE' liczba 'K' zwiekszy swoja 
               int j = 0; // tworzenie zmiennej pomocniczej ktora zwieksza sie gdy 'L' nie jest rowne vec[j]
               
               if(j = vec.size()) // jezeli 'J' jest rowne wielkosci wektora ...
               {
                    kr.push_back(k); // dodanie elementu - liczby 'K' na koniec wektora 'kr'
                    break; // zakacz petle ... juz wiecej liczb 'L' nie znajduje sie w wektorze vec
               }
               
               if(l == vec[j]) // porownywanie vec[j] z liczba 'L'
               { // jesli tak ...
                    k++; // zwiekszenie liczby 'K' - krotnosc ktora ma byc zapisana do wektora kr
                    vec.erase(vec.begin() + j); // usuwanie elementu o indeksie 'J'
               }
               else // jesli vec[j] nie jest rowny 'L'
                    j++; // zwieksz indeks czyli liczbe 'J'
               
               cout << vec[j] << " - " << k << endl;
          }    
     }

Co mogłem przegapić ... bo już nie mam pomysłów a od doszukiwania się błędów bolą mnie oczy ; [

1

Po 5 sekundach patrzenia...

if(j = vec.size())
0

Wielkie dzięki ... x ]

dzięki tobie i temu błędowi znalazłem inne ... i dostałem olśnienia ; ]

Jeszcze raz WIELKIE DZIĘKI !

0

To jest dowód na to, że pisząc programy należy pisać tak by nie było warning'ów. Kompilator na pewno cię ostrzegał o możliwym błędzie!

1 użytkowników online, w tym zalogowanych: 0, gości: 1