6 svar
70 visningar
coffeshot behöver inte mer hjälp
coffeshot 429
Postad: 27 aug 18:51 Redigerad: 27 aug 18:52

Varför är a mod b < a/2 (a>b)?

Hej,

Nu vill jag inte utelämna information: men lite bakgrund som jag inte tror är relevant alls för min fråga. Jag höll på med en uppgift som bad mig analysera tidskomplexiteten (datalogiskt begrepp) av gcd(a,b)\text{gcd}(a,b), implementerad m.h.a. Euklides algorithm.

Här visade sig en trivial egenskap (för att förstå uppgiften) vara att amodb<a2a \mod b < \frac a 2.

Dessvärre kan jag inte hitta någon förklaring på internet som jag begriper, riktigt.

Jag tänker så här:

Antag att amodba2a \mod b \le \frac a 2.

amodba-qba \mod b \iff a-qb där qq är en konstant, qbaqb \le a

Alltså, antagandet blir

a-qba2a - qb \le \frac a 2

a(1-qb)a2a(1-qb) \le \frac a 2

Okej, nu får vi väl säga att aa inte är noll då, så det här blir inte superbra. Vi delar med aa iallafall:

1-qb121-qb \le \frac 1 2

-qb-12-qb \le - \frac 1 2

qb1qb \ge 1.

Och här vill man säga typ "det gäller alltid", fanns jag vet inte om det stämmer...

Så det här säger inte heller någonting riktigt. Jag tror inte heller det är helt rätt på andra steg.

Finns det någon som kan ge mig en bra förklaring på hur det funkar?

Ni är hjältar!

AlexMu 940
Postad: 27 aug 19:01 Redigerad: 27 aug 19:11

Jag antar i detta inlägg att du menar att amodba \operatorname{mod} b returnerar det minsta positiva heltalet som aa är kongruent med.

Vi kan tämka såhär: 

Vi vet att 0amodb<b0\leq a \operatorname{mod} b < b.

Om a2ba \geq 2b är olikheten uppenbar eftersom a2b\frac a2 \geq b, vilket är större än vad modulo operatorn kommer returnera. 

Därmed kan vi anta att b<a<2bb<a<2b och då kan vi skriva a=b+ra = b+r, där 0<r<b0<r<b

Definitionen av modulo ger oss att amodb=ra \operatorname{mod} b = r

Och vi har även att

a2=b+r2>b>rr+r2=2r2=r\displaystyle \frac{a}2 = \frac{b+r}{2} \underbrace{>}_{b > r} \frac{r+r}2 = \frac {2r}2 = r

Alltså har vi att amodb=r<a2a \operatorname{mod} b = r < \frac a2

sictransit Online 2844 – Livehjälpare
Postad: 27 aug 19:09 Redigerad: 27 aug 19:30

Jag kan förklara det med ord. 

Om b<a/2 så kommer b att ”gå en gång till” i a. Vi kan alltså subtrahera b från a tills b>=a/2.
7 mod 3=1 eftersom 3 går två gånger i 7, med 1 som rest. 

Om b=a/2 så är resten 0. 

Om b>a/2 så kan måste resten vara <a/2. 

Inte briljant matematiskt, men jag förstår hur jag tänker och som gammal kodare har jag alltid vetat att det är så utan att fundera så mycket. 

Laguna Online 31739
Postad: 27 aug 19:10

Är a > b?

AlexMu 940
Postad: 27 aug 19:10
Laguna skrev:

Är a > b?

Det var det jag också undrade, det står i titeln. (Inte i inlägget)

Laguna Online 31739
Postad: 27 aug 19:11
AlexMu skrev:
Laguna skrev:

Är a > b?

Det var det jag också undrade, det står i titeln. (Inte i inlägget)

Ja titta.

coffeshot 429
Postad: 28 aug 12:49 Redigerad: 28 aug 12:49
AlexMu skrev:

vi har även att

a2=b+r2>b>rr+r2=2r2=r\displaystyle \frac{a}2 = \frac{b+r}{2} \underbrace{>}_{b > r} \frac{r+r}2 = \frac {2r}2 = r

Alltså har vi att amodb=r<a2a \operatorname{mod} b = r < \frac a2

Den där delen var briljant, det var precis vad jag saknade.

Tack till dig och alla ni andra också förstås!

Sorry att jag glömde nämna a>b i OP.

Svara
Close