Member 12981853 Ответов: 3

Как найти общий фактор?


Hy, я пишу программу для поиска "общих факторов", моя программа правильно находит факторы, а также находит общие факторы, но выводит некоторые из них. Может ли кто-нибудь помочь мне найти все общие факторы?

Что я уже пробовал:

#include<iostream>
using namespace std;
int main (){
	int a,i,factors_1[100],memory_1;
	cin>> a;
	cout<<"Factors Are:" << endl;
	memory_1=0;
	for(i=1 ; i<=a; i++){
		if(a%i==0){
			factors_1[memory_1]=i;
			memory_1++;
		}
	}
	for(int z=0;z<memory_1;z++){
		cout<< factors_1[z] << endl;
	}
	int m,j,factors_2[100],memory_2;
	cin>> m;
	cout<< "Factors Are:" << endl;
	memory_2=0;
	for(j=1; j<=m; j++){
		if(m%j==0){
			factors_2[memory_2]=j;
			memory_2++;
		}
	}
	for(int q=0;q<memory_2 ;q++){
		cout<< factors_2[q] << endl;
	}
	int w,common[100],v;
	v=0;
	for(w=0;w<memory_1;w++){
		if(factors_1[w] == factors_2[w]){
			common[v] = factors_1[v] ;
			v++;
		}
	}
	cout<< "Common Factors Are" << endl;
	for(int o=0;o<v;o++){
		cout<< common[o] << endl;
	}
	return 0;
}

NotPolitcallyCorrect

Научитесь использовать свой отладчик.

Member 12981853

что такое дебюгер? Не могли бы вы дать мне какую-нибудь ссылку, где я ее найду?

jeron1

Посмотрите на ссылки в решении№1эта тема.[^]

3 Ответов

Рейтинг:
1

Stefan_Lang

Обычно вы анализируете два (или более) числа для величайший общий делитель (или множитель), а не все из них. Вы уверены, что хотите распечатать все?

Если вы хотите все, то одним из способов было бы сначала определить наибольший общий делитель (см. Наибольший общий делитель - Википедия[^]), а затем просто разместите все факторы (делители) этого числа.


Рейтинг:
1

Patrice T

Примечание: слово факторобычно ссылаются на простые множители, составляющие целое число; Ваша программа скорее ищет делители.

Цитата:
что такое дебюгер?
Отладчик обычно интегрирован с вашей IDE, детали варьируются в зависимости от IDE. Вы, вероятно, найдете tutos для своей IDE.
-----
Ваша проблема заключается в том, что ваша программа находит общие делители только в том случае, если они находятся в одном и том же положении.
-----
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Он позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Stefan_Lang

"общий фактор" действительно верен, хотя предпочтительным термином в математике, по-видимому, является "(наибольший) общий делитель". Видишь https://en.wikipedia.org/wiki/Greatest_common_divisor

Patrice T

Теперь проблема в том, чтобы узнать, что такое запрос?
- найти все простые множители
- найти все делители
- найти наибольший общий делитель
у них 3 разных вопроса с 3 разными ответами.

Stefan_Lang

Правильный вопрос. Но он никогда не наставлял Прайма, так что я полагаю, что мы можем исключить это на данный момент.

Рейтинг:
1

CPallini

Вот в чем изъян:

Цитата:
int w, common[100], v;
v=0;
для(w=0;w< memory_1;w++){
если (factors_1[w] == factors_2[w]){
общим[в] = factors_1[в] ;
в++;
}
}
Вы должны использовать два вложенных цикла, чтобы найти все общие факторы, например
int w1,w2,common[100],v;
v=0;
for(w1=0;w1<memory_1;w1++)
{
  for(w2=0;w2<memory_2;w2++)
  {
    if(factors_1[w1] == factors_2[w2])
    {
      common[v] = factors_1[w1] ;
      v++;
      break;
    }
  }
}


Пожалуйста, обратите внимание, вы используете C++: этот vector класс (и string один) имеется в наличии. Вы могли бы написать, например:
#include <iostream>
#include <string>
#include <vector>
using namespace std;


vector <int> find_factors(int n)
{
  vector <int> factor;

  for (int i=1; i<=n; ++i)
  {
    if ( (n % i) == 0)
      factor.push_back(i);
  }
  return factor;
}

vector <int> find_common(const vector<int> &va, const vector<int> & vb)
{
  vector <int> vcommon;

  for (size_t m=0; m<va.size(); ++m)
  {
    for (size_t n=0; n<vb.size(); ++n)
    {
      if ( va[m] == vb[n])
      {
        vcommon.push_back(va[m]);
        break;
      }
    }
  }
  return vcommon;
}

void show_vector( const string & header, const vector <int> & v)
{
  cout << header << endl;
  for (size_t n=0; n<v.size(); ++n)
    cout << v[n] << endl;
}

int main()
{
  int a,b;
  vector <int> fa, fb, fcommon;

  cin >> a;
  fa = find_factors(a);
  show_vector("factors are:", fa);

  cin >> b;
  fb = find_factors(b);
  show_vector("factors are:", fb);

  fcommon = find_common( fa, fb);
  show_vector("common factors are:", fcommon);
}