Форум программистов, компьютерный форум, киберфорум
Наши страницы

В интервале от a до b найти число с наибольшим количеством делителей - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Программа разбора и вычисления значения арифметического выражения http://www.cyberforum.ru/cpp-beginners/thread658742.html
Написать программу разбора и вычисления значения арифметического выражения. На входе программы — строка, содержащая числа, скобки «(» и «)» и знаки 4-х арифметических операций: + - * / На выходе —...
C++ Ввод числа Помогите с заданием: нужно написать программу С++, которая с помощью операторов ввода-вывода (printf и scanf) вводит и выводит на экран числовые значения переменных. А значения таковы: E=10^3, F=... http://www.cyberforum.ru/cpp-beginners/thread658733.html
C++ Упорядочить матрицу
Разработать программу, которая вводит целочисленную матрицу из n строк и m столбцов (1<n<=100, 1<m<=50) и упорядочить все элементы матрицы таким образом, чтобы при чтении матрицы по строкам ее...
C++ Задача на "особый" элемент матрицы
Задача: Дана целочисленная матрица A (N.M). Определить количество "особых" элементов массива А, считая элемент "особым", если в его строке слева от него находятся элементы, меньшие его, а справа...
C++ Задача на циклы: Можно ли разменять m рублей http://www.cyberforum.ru/cpp-beginners/thread658708.html
Можно ли разменять m рублей на рублёвые, трёхрублёвые, пятирублёвые купюры так, чтобы получить всего 10 купюр? При этом известно, что 10<m<50. Вот такое условие. Вот что я намалякал):...
C++ Вычислить коэффициент трения Всем доброго время суток. Тело соскальзывает с наклонной плоскости (угол наклона \alpha) с ускорением a. Написать программу для определения коэффициента трения k тела о плоскость. Воспользоваться... подробнее

Показать сообщение отдельно
valeriikozlov
Эксперт С++
4673 / 2499 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
28.09.2012, 03:20
Вариант (при поиске в большом интервале будет самым быстрым из здесь приведенных):
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
unsigned long f(unsigned long a)
{
    if (a == 1 || a == 2)
      return a;
    unsigned long n=(unsigned long)sqrt((double)a), i, tmp=0, res;  
    while(a%2==0)
    {
        tmp++;
        a/=2;
    }
    res=tmp;
    for(i=3; i<=n && a>1; i+=2)
        if(a%i==0)
        {
            tmp=0;
            while(a%i==0)
            {
                tmp++;
                a/=i;
            }
            res=res+tmp+res*tmp;
        }
    if(a>1)
        res=res*2+1;
    return res+1;
}
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru