|
TwojePC.pl © 2001 - 2025
|
 |
A R C H I W A L N A W I A D O M O Ś Ć |
 |
| |
|
[Matematyka] Potęgowanie jedenastki. , Chrisu 16/02/12 09:59 Macie jakiś pomysł jak policzyć ilość jedynek w potędze liczby 11? /// GG# 1 110 10 10 11 100 10 \\\ - mhm , gorky 16/02/12 13:44
#!/usr/bin/python
liczba=11**6
print(liczba.__str__().count('1'))- aha , gorky 16/02/12 13:45
zamiast 6 wstaw sobie jaką tam potęgę chcesz
- jakby to było tak proste ;) , Chrisu 16/02/12 14:21
chodzi o 11^n gdzie n może być do 2^32 ;) /// GG# 1 110 10 10 11 100 10 \\\ - to dodajesz , Wedrowiec 16/02/12 14:45
for (i=1;i<=(2^32);i++)
;)"Widziałem podręczniki
Gdzie jest czarno na białym
Że jesteście po**bani" - jaja sobie robisz? , Chrisu 16/02/12 14:49
co Ci jest w stanie podnieść 11 do takiej potęgi ;) /// GG# 1 110 10 10 11 100 10 \\\ - Mathematica , gorky 16/02/12 14:59
na pewno potrafi
no ale rozumiem już że chodzi o trik analityczny, a z tymi skończyłem już dawno temu ;)- mathematica wszystko potrafi ;) , Chrisu 16/02/12 20:48
to chodzi o to by w pascalu/c++ oprogramować.
A zależność jest taka, że dana cyfra, to jest suma cyfry na tej samej pozycji i pozycji poprzedniej potęgi wcześniejszej.
Myślałem, by wrzucić to do tablicy i dodawać "pisemnie". Tylko jeszcze zoptymalizować to - bo nadal nie widzę tego dla 11^(2^32) ;)
1___________11
2__________121
3_________1331
4________14641
5_______161051
6______1771561
7_____19487171
8____214358881
9___2357947691
10_25937424601 /// GG# 1 110 10 10 11 100 10 \\\
- pewnie jakiś , Wedrowiec 16/02/12 15:27
piękny umysł ;)"Widziałem podręczniki
Gdzie jest czarno na białym
Że jesteście po**bani"
- Hehe , ligand17 16/02/12 15:48
jakieś 12 lat temu to przerabiałem. U mnie chodziło o sumowanie cyfr, ale w 11 jest prawidłowość, policz sobie parę pierwszych wyrazów ciągu 11^n na piechotę i załapiesz.- no prawidłowość jest na pewno... , gorky 16/02/12 16:09
http://img442.imageshack.us/...42/1825/imagete.png
(pierwszych tysiąc potęg)
- może , Visar 17/02/12 08:42
można wykorzystać fakt, że kolejne cyfry wchodzące w skład liczby będącej potęgą 11 mozna uzyskać z trójkąta Pascala. Każdy wiersz trójkąta odpowiada za kolejną potęgę 11. Idąc od prawej do lewej wypisujemy kolejne cyfry liczby i sprawdzamy czy jest to 1. Oczywiście jeśli w trójkącie jest liczba większa od 10 to cyfra jest równa liczba modulo 10, a liczba / 10 dodajemy do liczby po lewej.
Problemem jest to, że wyliczanie współczynników szybko przekroczy długość wbudowanych typów. Dlatego może warto skorzystać z arytmetyki na liczbach zapisywanych w stringach, np. korzystajac z biblioteki BigIntegerLibrary.
przykładowy kod:
(dla testów bez dodatkowych bibliotek można użyć typu unsigned long long zamiast BigUnsigned, ale wtedy prawidłowo liczy tylko do potegi 62)
#include "BigInt\BigIntegerLibrary.h"
int main()
{
BigUnsigned suma, element = 1, przeniesienie = 0;
unsigned int n, potega11, iloscCyfr1 = 0;
std::cout << "Program zlicza ilosc cyfr 1 w podanej potedze liczby 11" << std::endl;
std::cout << "Wprowadz potege liczby 11: ";
std::cin >> potega11;
for(n = 0; n <= potega11; n++)
{
suma = element + przeniesienie;
if (suma % 10 == 1)
iloscCyfr1++;
przeniesienie = suma / 10;
element = element * (potega11 - n) / (n + 1);
}
std::cout << "Cyfra 1 wystepuje " << iloscCyfr1 << " razy." << std::endl;
return 0;
}Visar - dzięki... , Chrisu 17/02/12 09:49
123 /// GG# 1 110 10 10 11 100 10 \\\
- Błąd , alchemik 28/02/12 19:06
Kolega pewnie robi zadanie 3 z tegorocznego "Algotmionu" :D Nie chciałbym Cię straszyć, ale wygląda na to, że zamieszczony tu program jest, kolokwialnie mówiąc, felerny. Dowód? Prosty. Wpisz w kompa, żeby policzył 11^100, a występuje tam 12 cyfr 1, a tutejszy program zwraca wartość 11. Dalej różnice są o wieeeele większe. Życzę powodzenia ;p- Fakt , Visar 29/02/12 00:31
W trakcie działania na coraz większych liczbach, po zakończeniu może pozostać przeniesienie które już nie jest uwzględnianie. Trzeba tylko po zakończeniu pętli rozbić jeszcze przeniesienie.
#include "BigInt\BigIntegerLibrary.h"
int main()
{
BigUnsigned suma, element = 1, przeniesienie = 0;
unsigned int n, potega11, iloscCyfr1 = 0;
std::cout << "Program zlicza ilosc cyfr 1 w podanej potedze liczby 11" << std::endl;
std::cout << "Wprowadz potege liczby 11: ";
std::cin >> potega11;
for(n = 0; n <= potega11; n++)
{
suma = element + przeniesienie;
if (suma % 10 == 1)
iloscCyfr1++;
przeniesienie = suma / 10;
element = element * (potega11 - n) / (n + 1);
}
while (przeniesienie > 0)
{
if (przeniesienie % 10 == 1)
iloscCyfr1++;
przeniesienie /= 10;
}
std::cout << "Cyfra 1 wystepuje " << iloscCyfr1 << " razy." << std::endl;
return 0;
}Visar
|
|
|
|
 |
All rights reserved ® Copyright and Design 2001-2025, TwojePC.PL |
 |
|
|
|