Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
potřeboval bych poradit jak zjistit jestli číslo délky až 20 je dělitelné 1 až 1000 (tuto část výpočtu potřbuji do KSP... bez toho se bohužel asi nehnu:( jelikož neznám v céčku žádný tip, který by mohl mít maximální velikost 9*10^19 + 9*10^18...+9)
hledal jsem na wikipedii tam jsem našel pro čísla 1-18 pak 20, 30, 40, 50, 100 a 1000
dokone tam i píší nějaké obecné kriterium, ale tomu jsem vážně neporozumněl.... díky moc za rady
Offline
↑ VojtechSejkora: No v tom cecku by to urcite slo udelat a vyzkousel bych to prubnout asi prez string kde neni problem nadefinovat si pole o velikost [20+1] k tomu bych udelal nejakej cyklus treba FOR no do toho dat nejakou podminku kdyz je delitelny tak neco udelej kdyz ne tak testuj dal nez dojdu k treba te 1000.
Mohl bych to tu rozepsat vic nebo ten program i udelat ale nejsem si uplne jist jestli sem pochopil uplne presne zadani. Jde o to ze uzivatel zada az 20 mistne cislo a ten program by mel vypsat jestli je delitelny 1,2,3...1000 ?? a pro kazde toto cislo vypise: Jsem delitelny jednickou, Nejsem delitelny dvojkou atd. ? Omluvte kdyztak moji nechapavost ale sem utahanej jak pes :),. Kdyztak to tu rozvedte jestli muzete nebo sem hodte i ten vas kod v C pokud teda chcete to totim smerem resit :).
Offline
↑ Tlacenka:
tak to bych asi taky zvládl... mě šlo spíše o to že jsem chtěl (jelikož mám jednotlivé cifry toho čísla) zjistit jestli je daným číslem dělitelný nebo ne (a na vstupu dostanu počet míst a jakým číslem to má být dělitelné a mám vypsat čísla, která při zadané délce jsou dělitelné tím zadaným číslem)
a žádnej program nepiš... to by moc nemělo pak smysl:)
spíše by mě zajímalo jestli někdo pochopil z wiki toto:
Obecné kritérium dělitelnosti
Libovolné kritérium dělitelnosti lze zapsat jako ciferný součet s vahami — číslo x je dělitelné prvočíslem n právě když Σk αkak je dělitelné n, kde x = a0 + 10a1 + 100a2 + 1000a3 + …+10nan, neboli je zapsáno v poziční soustavě se základem 10.
Jednotlivé váhy v ciferném součtu jsou řešení jednoduchých kongruencí . Řešení jsou tedy zbytky po dělení .
Například číslo x je dělitelné 17 právě když a0 − 7a1 − 2a2 − 3a3 + 4a4 + 6a5 − 8a6 + 5a7 − a8 + 7a9 + 2a10 + 3a11 − 4a12 − 6a13 + 8a14 − 5a15 + a16 … je dělitelné 17.
a jestli je správné.... a kdyby mi to někdo mohl vysvětlit jak to tam myslí
Offline
Offline
Ahoj, také řeším KSP a problémy spojené s touto úlohou :(
Zadané číslo může být maximálně 19-ti místné, nikoliv 20 místné!
Zkus požít typ unsigned long long int, což je beznaménkové číslo v rozsahu 0 až 2^64-1, což ti pokryje 18 řádů a s devatenáctým řádem si již určitě nějak poradíš, popř. nezískáš plný počet bodů.
Offline
↑ VojtechSejkora:
K tomu obecnemu na wiki - napriklad pro tech 17 pri desitkovem zakladu:
a0, a1, a2 ... jsou ty cifry
1 deleno 17 da zbytek 1, takze proto 1*a0
10 deleno 17 da zbytek 10, takze dalsi clen muze byt treba 10*a1, ale vzhledem k delitenosti je to stejne jako -7*a1 (rozdil tech koeficientu je 17, mohlo by tam byt treba i -24*a1 nebo 27*a1 atd. Tipuju, ze protoze -7 je blize nule nez nez 10, tak se tam dava tech -7 aby to byly mensi cisla, to same pro ty dalsi cleny)
100 deleno 17 da zbytek 15, takze dalsi clen 15*a2 nebo -2*a2
1000 deleno 17 da zbytek 14, takze -3*a3
atd...
(nevim, jestli tohle je to, co ti neni jasne)
Offline
↑ Lumikodlak:
aha díky přesně to mi nebylo jasné:D takže tam dávají bližší k nule a + nebo - ... ok tak dík... teď už to konečně chápu
Offline
↑ vojta01:
čoveče nevím proč, ale píšemi že se neschoduje návratový typ nebo tak něco
přesně mě to píše
"conflicting types for 'mocnina'"
a já jelikož jsme nikdy dříve nedělal v céčku tak vážně nevím co s tím je
unsigned long long int mocnina (int n, int x) { unsigned long long int vystup=1L; for(;n>0;n--) vystup=x * vystup; return vystup; }
když mi poradíš co dělám blbě budu moc rád
Offline
↑ VojtechSejkora:
Spíš napiš tu část, kde fci voláš. Mně to funguje.
Offline
unsigned long long int palindrom=0; for(;q<pulkaD;q++){ palindrom+=cifra[q]*mocnina(D-q-1,10); palindrom+=cifra[q]*mocnina(q,10); }
Offline
↑ VojtechSejkora:
Nevim, asi budeš muset poslat celý zdroják.
Zkontroluj si datové typy u cifra[q] a D.
Nebo třeba tam chybu nemáš a nezvládá to tvůj kompilátor (nevím jestli je to možné?).
Offline
↑ gladiator01:
cifra[q] je typu short a D je tipu int
Offline
↑ Lumikodlak:
a když mi pak výjde po tom oc jsme to již jednou tím vzorcem prohnal něco jako třeba
54345
tak mohu o5 aplikovat stejný postup i na toto číslo dokud nedostanu nějaké jednoduché třeba 20 nebo tak že?
nejsem si tím totiž úplně jist dík
Offline
↑ VojtechSejkora:
Podle me ano, nevidim duvod, proc by ten vzorec nesel pouzit znova, ale priznam se, ze jsem ho sam nikdy nepouzival :-)
↑ sL1:
2x long to by mel byt 64-bitovy integer.
Offline