Форум программистов, компьютерный форум CyberForum.ru

По количеству делителей числа определить само число - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ как в с++ создается типизированный файл? и как вообще понять типизированный? http://www.cyberforum.ru/cpp-beginners/thread376677.html
вопрос в теме
C++ дана целочисленная прямо угольная матрица 1) задача Дана цедочисленная прямоугольная матрица определить: найти номер первой из строк, содержащих хотябы один положительный элемент размер массива 5х5 замолнить случайными числами. 2) задача В одномерном массиве, состоящем из 10 целых элементов вычислить 1) номер максимального по модулю элемента 2)Сумму элементов массива, расположенных после первого положительного элемента ... http://www.cyberforum.ru/cpp-beginners/thread376658.html
В чем разница между простым линейным списком, и динамическим линейным списком? C++
вопрос в теме
C++ Двоеточие в конструкторе, что это?
Пример - конкретно из книги дейтела, вопрос вызывает двоеточие после конструктора, если оно позвляет производить инициализацию - то почему не делать бы этого в теле. Было бы очень хорошо если бы кто-нибудь ткнул носом в мануал по возможным вариантам использования этой вундервафли. String::String( const char *s):length( ( s != 0) ? strlen(2) : 0){/*...*/} Поиском по форуму не нашел, если было...
C++ проверьте правильность программ http://www.cyberforum.ru/cpp-beginners/thread376630.html
Нужно составить программу который подсчитывает площадь прямоугольного треугольника когда известна длина и высота: { Float a, h, s; Printf (“vvedite dlinu I visotu: ”); Scanf (“%f %f”, &a, &h); S=(1.0/2.0)*a*h Printf (“ploshad= %f”, s); Return 0; }
C++ Определить количество нечетных членов последовательности, имеющих четные номера Даны натуральные числа n, а1,......,аn. Определить количество членов ак последовательности а1,......,аn : имеющих четные порядковые номера и являющихся нечетными числами. подробнее

Показать сообщение отдельно
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
02.11.2011, 16:56     По количеству делителей числа определить само число
я оказывается уже когда-то давно решал эту задачу. Тогда просто выложу код:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#if defined(_MSC_VER)
#define _CRT_SECURE_NO_DEPRECATE
#endif
 
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#if defined(__GNUC__)
 
#define __STDC_FORMAT_MACROS
#include <inttypes.h>
 
#elif defined(_MSC_VER)
 
typedef __int64 int64_t;
#define PRId64 "I64d"
#define SCNd64 "I64d"
 
#endif
int mas_prost[20]={2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71};
int64_t N=-1;
int mas[20]={0};
int D, i_mas;
void fun_rec(int del, int pr, int64_t temp)
{
    if(temp<0 || temp>1000000000000001 || del>D)
        return;
    if(del==D)
    {
        if(N==-1)
        {
            N=temp;
            return;
        }
        else
        {
            if(N>temp)
                N=temp;
            return;
        }
    }
    mas[pr]++;
    int temp_del=mas[0], fl=1;
    for(int i=1; fl && i<20; i++)
    {
        if(mas[i])
            temp_del=temp_del*(mas[i]+1)+mas[i];
        else
            fl=0;
    }
    fun_rec(temp_del+1, pr, temp*mas_prost[pr]);
    mas[pr]--; mas[pr+1]++;
    if(pr<19)
    {
        int temp_del=mas[0], fl=1;
        for(int i=1; fl && i<20; i++)
        {
            if(mas[i])
                temp_del=temp_del*(mas[i]+1)+mas[i];
            else
                fl=0;
        }
        fun_rec(temp_del+1, pr+1, temp*mas_prost[pr+1]);
        mas[pr+1]--;
    }
}
 
int main()
{
   freopen("input.txt","r",stdin);
  freopen("output.txt","w",stdout);
   scanf("%d", &D);
   if(D==1)
       printf("1");
   else
   {
   if(D==2)
       printf("2");
   else
   {
       mas[0]=1;
       fun_rec(2, 0, 2);
       if(N==-1)
           printf("0");
       else
           printf( "%" PRId64, N);
   }
   }
    return 0;
}
 
Текущее время: 06:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru