Задачка закачка. |
|
|
|
|
Публикувано на: 24.11.2008 19:09 |
|
|
|
|
Изненадващо, но съществуват само три числа, които могат да бъдат
получени от сумата на четвъртата степен на техните цифри:
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.
Намерете сумата на всички числа, които могат да бъдат получени от
сумата на петата степен на техните цифри. :)
|
| |
|
|
|
|
|
|
|
Публикувано на: 24.11.2008 19:32 |
|
|
|
|
A ти направил ли си я за 4 степен-нека ти дам аз една,която не е
такава игра4ка-напиши ми програма,която намира вси4ки автоморфни
4исла
|
| |
Това мнение е редактирано от zaikoni на 24.11.2008 19:33
|
|
|
|
|
Публикувано на: 24.11.2008 20:04 |
|
|
|
|
CODE1
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;
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
|
|
|
|
|
Публикувано на: 27.11.2008 11:12 |
|
|
Ронин
Мнения: (52)
|
Един пример и резултати от него (в случая за 5-та степен):
CODE1
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;
} |
Ето и изхода:
CODE1
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 |
|
| |
|
|
|
|
|
Публикувано на: 27.11.2008 22:22 |
|
|
|
|
Толкова е. Точно 443839! :) Бях решил че задачата е изплашила
всички. :)
|
| |
|
|
|