Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
ramazan05duldug
39 / 39 / 20
Регистрация: 23.04.2012
Сообщений: 462
Записей в блоге: 2
#1

Нахождение делителя

22.04.2016, 13:02. Просмотров 261. Ответов 13
Метки нет (Все метки)

Всем привет. Имеется простое число 2^32 +1. У числа имеется 2 делителя, которые не равны единице и самому числу. Нужно вывести эти делители в выходном файле output.txt по возрастанию. Спасибо

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2016, 13:02
Ответы с готовыми решениями:

Нахождение наибольшего общего делителя
Borland C++ Найти наибольший общий делитель двух натуральных чисел a и b.

Нахождение наибольшего общего делителя
Разработать и испытать рекурсивную функцию для вычисления наибольшего общего...

Нахождение наименьшего нечетного делителя
Здравтвуйте уважаемые форумчане! Подскажите пожалуйста какие у меня...

Нахождение наибольшего общего делителя n чисел
Найти НОД (наибольший общий делитель) n чисел. Входные данные Первая...

Быстрое нахождение максимального делителя числа
Всем привет! Столкнулся с такой проблемой, у меня дано число n \leq 10 ^ 18....

13
zss
Модератор
Эксперт С++
6985 / 6547 / 4151
Регистрация: 18.12.2011
Сообщений: 17,275
Завершенные тесты: 1
22.04.2016, 13:21 #2
Воспользуйтесь, например,
Нахождение наименьшего нечетного натурального делителя k (k≠1) любого заданного натурального числа n
как образцом.
Потом, покажите здесь, что получилось.
0
ramazan05duldug
39 / 39 / 20
Регистрация: 23.04.2012
Сообщений: 462
Записей в блоге: 2
22.04.2016, 13:34  [ТС] #3
Цитата Сообщение от zss Посмотреть сообщение
Воспользуйтесь, например,
Нахождение наименьшего нечетного натурального делителя k (k≠1) любого заданного натурального числа n
как образцом.
Потом, покажите здесь, что получилось.
На паскале пытался, но тут не помещается это число в int...
А на с++ не особо догоняю...
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
uses crt;
var ch,otv:longint;
function Delitel(ch:longint):longint;
var kol,i:longint;
begin
 kol:=0;
 for i:=1 to ch do
  if (ch mod i)=0 then inc(kol);
 Delitel:=kol;
end; 
Begin
 ClrScr;
 write('Vvedite chislo: ');
 readln(ch);
 otv:=Delitel(ch);
 writeln('Otvet: ',otv);
 readkey;
End.
0
zss
Модератор
Эксперт С++
6985 / 6547 / 4151
Регистрация: 18.12.2011
Сообщений: 17,275
Завершенные тесты: 1
22.04.2016, 13:36 #4
Число поместиться в "long long int"
0
ramazan05duldug
39 / 39 / 20
Регистрация: 23.04.2012
Сообщений: 462
Записей в блоге: 2
22.04.2016, 13:44  [ТС] #5
Цитата Сообщение от zss Посмотреть сообщение
Число поместиться в "long long int"
Ну это в с++... а в с++ сам пока не особо способен... может поможете?
0
zss
Модератор
Эксперт С++
6985 / 6547 / 4151
Регистрация: 18.12.2011
Сообщений: 17,275
Завершенные тесты: 1
22.04.2016, 14:32 #6
Ничего не меняйте, только вместо int напишите long long int
0
ledoxod
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 6
22.04.2016, 15:21 #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <fstream>
#include <math.h>
 
typedef long long int longint;
longint GetDivisor(const longint i_number, longint num)
{
    for (longint i = num; i < i_number ; i ++)
        if (i_number % i == 0)
            return i;
    return 0;
}
 
int main()
{
    longint number = pow(2, 32) + 1;
    longint num = 2;
    longint divisor = GetDivisor(number, num);
 
    std::ofstream fout("output.txt");
 
    while (divisor != 0)
    {
        fout << divisor << "\n";
        divisor = GetDivisor(number, divisor + 1);
    }
    fout.close();
    return 0;
}
0
meJevin
156 / 148 / 92
Регистрация: 18.11.2015
Сообщений: 674
Завершенные тесты: 1
22.04.2016, 15:46 #8
ledoxod, вы хотя бы представляете, сколько это времени займет, проверять в цикле каждое число от 2 до 4294967297?

На моем компе, например, займет это столько секунд: 346956 (96,5 часов).

А он у меня очень даже мощный.
0
meJevin
156 / 148 / 92
Регистрация: 18.11.2015
Сообщений: 674
Завершенные тесты: 1
22.04.2016, 15:49 #9
Вот столько за секунду в цикле проверяется чисел на моем компьютере.
0
Миниатюры
Нахождение делителя  
ledoxod
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 6
22.04.2016, 15:50 #10
ну это был общий случай)
конкретно здесь можно и так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <math.h>
#include <fstream>
 
typedef long long int longint;
longint GetDivisor(const longint i_number)
{
    for (longint i = 2; i < i_number ; i ++)
        if (i_number % i == 0)
            return i;
    return 0;
}
int main()
{
    longint number = pow(2, 32) + 1;
    longint divisor = GetDivisor(number);
 
    std::ofstream fout("output.txt");
 
    fout << divisor << "\n";
    fout << number/divisor << "\n";
 
    fout.close();
    return 0;
}
0
ramazan05duldug
39 / 39 / 20
Регистрация: 23.04.2012
Сообщений: 462
Записей в блоге: 2
25.04.2016, 11:01  [ТС] #11
Или так...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream> 
#include <fstream> 
using namespace std;
int main(){
    setlocale(LC_ALL, "rus");
    ofstream Work1("out1.txt");
    long long x = 2;
    for (int i = 0; i<31; i++)
    {
        x = x * 2;
    }
    x = x + 1;
    int j;
    for (j = 2; j<2147483647; j++)
    {
        if (x%j == 0) Work1 << j << endl;
    }
    Work1.close();
    return 0;
}
0
SpBerkut
Объявлятель переменных
948 / 274 / 276
Регистрация: 24.09.2011
Сообщений: 1,008
Завершенные тесты: 2
25.04.2016, 17:41 #12
Цитата Сообщение от ramazan05duldug Посмотреть сообщение
Имеется простое число 2^32 +1. У числа имеется 2 делителя, которые не равны единице и самому числу.
Вы уж определитесь простое число или с делителями.
0
Aymurat
111 / 105 / 62
Регистрация: 07.11.2014
Сообщений: 734
Завершенные тесты: 6
25.04.2016, 17:54 #13
Цитата Сообщение от ramazan05duldug Посмотреть сообщение
Или так...
В Вашем варианте будет выводить сразу все делители. Поставьте ограничение:
C++
1
2
3
4
5
6
int sch=0;
 for (int j = 2; j<2147483647; j++)
    {
        if (x%j == 0 && sch<2) {Work1 << j << " "<< endl; sch++;}
        if (sch==2) break;
    }
0
SpBerkut
Объявлятель переменных
948 / 274 / 276
Регистрация: 24.09.2011
Сообщений: 1,008
Завершенные тесты: 2
25.04.2016, 18:07 #14
C++
1
2
3
4
5
6
7
8
9
int main()
{
    long long int r = 1;
    for (int i = 0; i < 32; r*=2, i++);
    r++;
    long long d = 3;
    while (r%d) d+=2;
    std::cout << d << ", " << r/d;
}
0
25.04.2016, 18:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2016, 18:07

Нахождение наибольшего общего делителя для 6-и чисел
привет! у меня есть задача на нахождение наибольшего общего делителя для 6-и...

Нахождение наибольшего общего делителя двух натуральных чисел
1)Используя функцию NOD нахождения наибольшего общего делителя двух натуральных...

Нахождение наибольшего общего делителя - почему выводит неверный итог?
Всем привет, что-то не могу понять:( Очень прошу помочь! int a, b; cin &gt;&gt; a...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru