Регистрирайте се безплатно, за да използвате услугите на сайта! | Вход
Начало Новини ИТ Работа Форум Видео Уроци Скриптове WiFi точки MyLinks Mytech Още


Нова тема
Задачка закачка.
Тази тема е погледната 260 пъти
Добави темата към любими | Принтирай темата | Нова тема 
Публикувано на: 24.11.2008 19:09
jpg
Ронин

Модератор

Мнения: (152)

Изненадващо, но съществуват само три числа, които могат да бъдат
получени от сумата на четвъртата степен на техните цифри:
 1634 = 1^4 + 6^4 + 3^4 + 4^4
 8208 = 8^4 + 2^4 + 0^4 + 8^4
 9474 = 9^4 + 4^4 + 7^4 + 4^4
 ( 1^4 не е сума и приемаме че не влиза можду тези числа )
 Сумата на тези числа е 1634 + 8208 + 9474 = 19316.

 Намерете сумата на всички числа, които могат да бъдат получени от
сумата на петата степен на техните цифри.
:)


 
---------------------------
Потребител от: 16.07.06 | Всички уроци от jpg | Всички скриптове от jpg
напиши eMail напиши лично съобщение виж профила на jpg
Публикувано на: 24.11.2008 19:32
zaikoni
Самурай

Модератор

Мнения: (239)

A ти направил ли си я за 4 степен-нека ти дам аз една,която не е
такава игра4ка-напиши ми програма,която намира вси4ки автоморфни
4исла


 
Това мнение е редактирано от zaikoni на 24.11.2008 19:33
---------------------------
Потребител от: 30.01.08 | Всички уроци от zaikoni | Всички скриптове от zaikoni

Visual Studio 2008 only (to the next version :-))
напиши eMail напиши лично съобщение виж профила на zaikoni
Публикувано на: 24.11.2008 20:04
jpg
Ронин

Модератор

Мнения: (152)

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main() {
   
unsigned long long i = 0;
   
   
#define PRINT( d ) for( ; i < d; i++ ) \
       
if( i * i % d == i ) printf( "%llu = %llu^2\n", i * i, i )
   
   
PRINT( 10 );
   
PRINT( 100 );
   
PRINT( 1000 );
   
PRINT( 10000 );
   
PRINT( 100000 );
   
PRINT( 1000000 );
   
PRINT( 10000000 );
   
PRINT( 100000000 );
   
PRINT( 1000000000 );
   
PRINT( 10000000000 );
   
   
return 0;
}
Тези ли имаш педвид?
Edit: Може да има и някой по големи, не съм запознат с техният случай. От 32-та бита изкопчих тези. Може
също така да има и по оптимизирано решение. По принцип си мислех да не участвам в тази дискусия с код, а
само като критерий за вярната сума. С 'да' и 'не'. :)
Едит2:
Цитат от zaikoni:
A ти направил ли си я за 4 степен-нека ти дам аз една...
Направил съм я за 5 степен, а за 4-та си е дадено по условие. Не съм проверявал дали е вярно.
Edit3:
 Малка редакция на кода за 64-битова проверка, която коства около 6 минути на средна машинка.





 
Това мнение е редактирано от jpg на 24.11.2008 22:32
---------------------------
Потребител от: 16.07.06 | Всички уроци от jpg | Всички скриптове от jpg
напиши eMail напиши лично съобщение виж профила на jpg
Публикувано на: 27.11.2008 11:12
FlyAway
Ронин

Мнения: (52)

Един пример и резултати от него (в случая за 5-та степен):

CODE
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <cmath>
#include
<ctime>
#include
<iostream>
#include
<string>
#include
<vector>

struct ResultData
{
   
int nPower;
   
std::string strNumber;
   
unsigned int ulNumber;
}g_tResultData;

std::vector<ResultData> g_vecResultCollection;

void Search(unsigned int max, int power)
{
   
unsigned int Cache[10];
   
for(int i = 0; i < 10; i++)
    {
       
Cache[i] = (unsigned int)std::pow(double(i), double(power));
   
}

   
int pos = 9;
   
char Number[] = "0000000002";
   
for(unsigned int i = 2; i < max; Number[pos]++, i++)
    {
       
for(int j = pos; j >= 0; j--)
        {
           
if(Number[j] > '9')
            {
               
Number[j] = '0';
               
Number[j - 1]++;
           
}
           
else
                break
;
       
}

       
unsigned int ulTempSum = 0;
       
for(int k = pos; k >= 0; k--)
        {
           
if(Number[k] > '0')
               
ulTempSum += Cache[int(Number[k] - '0')];
       
}

       
if(ulTempSum == i)
        {
           
g_tResultData.nPower = power;
           
g_tResultData.strNumber = Number;
           
g_tResultData.ulNumber = i;

           
g_vecResultCollection.push_back(g_tResultData);
       
}
    }
}

void PrintResult()
{
   
unsigned long size = (unsigned long)g_vecResultCollection.size();
   
if(size == 0)
    {
       
std::cout << "Emprty" << std::endl;
       
return;
   
}

   
for(unsigned long i = 0; i < size; i++)
    {
       
std::cout << g_vecResultCollection[i].ulNumber << " = ";

       
int nStartPos = 0;
       
const char* pszNumber = g_vecResultCollection[i].strNumber.c_str();
       
int _size = g_vecResultCollection[i].strNumber.size();

       
for(int k = 0; k < _size; k++)
        {
           
if(pszNumber[k] != '0')
            {
               
nStartPos = k;
               
break;
           
}
        }

       
for(int k = nStartPos; k < _size ; k++)
        {
           
std::cout << pszNumber[k] << '^' << g_vecResultCollection[i].nPower;

           
if(k < (_size - 1))
               
std::cout << " + ";
       
}
       
std::cout << std::endl;
   
}
}

int main()
{
   
const unsigned int max = 4000000000;
   
const int power = 5;
   
clock_t t1 = clock();

   
Search(max, power);
   
   
std::cout << std::endl << std::endl << "Search range: " << "0 - " << max << '\t' << "Power = " << power << std::endl << std::endl;
   
std::cout << std::endl << std::endl << "time: " << (double)(clock() - t1) / 1000 << " sec." << std::endl << std::endl;
   
   
PrintResult();
   
return 0;
}

Ето и изхода:

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
Search range: 0 - 4000000000    Power = 5



time: 125 sec.

4150 = 4^5 + 1^5 + 5^5 + 0^5
4151
= 4^5 + 1^5 + 5^5 + 1^5
54748
= 5^5 + 4^5 + 7^5 + 4^5 + 8^5
92727
= 9^5 + 2^5 + 7^5 + 2^5 + 7^5
93084
= 9^5 + 3^5 + 0^5 + 8^5 + 4^5
194979
= 1^5 + 9^5 + 4^5 + 9^5 + 7^5 + 9^5
Press any key to continue


 
---------------------------
Потребител от: 18.08.08 | Всички уроци от FlyAway | Всички скриптове от FlyAway
напиши eMail напиши лично съобщение виж профила на FlyAway
Публикувано на: 27.11.2008 22:22
jpg
Ронин

Модератор

Мнения: (152)

Толкова е. Точно 443839! :) Бях решил че задачата е изплашила
всички. :)


 
---------------------------
Потребител от: 16.07.06 | Всички уроци от jpg | Всички скриптове от jpg
напиши eMail напиши лично съобщение виж профила на jpg
 1 посетител чете тази тема (0 потребители и 1 гост)  
Активни потребители: ---
   




mytech.bg © 2004 - 2009 | Контакти | За реклама