6-stellige Zahl gesucht?

7 Antworten

sei abcdef die zahl.
dann gilt:
a+b+c+d+e+f=43
abcdef<500000
da abcdef eine quadratzahl ist, gilt dann weiter
abcdef=q^2, mit q<708

da abcdef 6stellig ist, ist weiter 316<q<708.

ansonsten können wir, da a+b+c+d+e+f=43,

mögliche kombinationen durchgucken:
eine Möglichkeit ist 9+9+9+9+6+1
kann aber nicht sein, da dann 999961>500000
wenn wir in der summe eine summe erhöhen, müssen wir eine andere verringern.

dadurch kommen wir bspw. auf folgende maximal denkbare zahl:
4+9+9+9+9+3
Ist sie eine quadratzahl?
nö :-)

also überlegen wir was anderes.
wie wir oben gesagt haben, muss abcdef=q^2 sein und 316<q<708.
also muss q insbesondere eine 3stellige zahl sein: q=ghi=100g+10h+1i

Deren quadrat ist (100g+10h+i)*(100g+10h+i)
=10000g^2+1000gh+100gi
+ 1000gh+100h^2+10hi
+ 100gi+10hi + i^2

=10000*(g^2)+1000*(2gh)+100*(2gi+h^2)+10*(2hi)+i^2
das muss gleich 100000a+10000b+1000c+100d+10e+f sein.

wir wissen, weil 316<ghi<708, dass 3<=g<=7.

Viel mehr fällt mir gerade auch nicht ein :-D

Progrämmchen:

#include <stdio.h>
#include <math.h>

int quer(int x) {
  int s;
  for (s=0; x!=0; x/=10)
    s += x%10;
  return s;
}

int main() {
  int M = ceil(sqrt(500e3));
  for (int i=1; i<=M; i++)
    if (quer(i*i)==43) printf("%d\n",i);
  return 0;
}

yay

man könnte noch argumentieren, dass ((i*i)%9)==7 sein muss... weil 4+3=7 ist... also die einstellige Quersumme... das wär noch etwas schneller... kicher

msmw22  30.04.2020, 14:18

Ich habs in Python gemacht, weil ich gerade keinen C Compiler hatte

import math

for x in range(100000, 499999): 
  correct = 0
  x_str = str(x)
  e_num = 0

  for e in x_str: 
    e_num += int(e)
    if e_num == 43: 
      correct += 1

  if (math.sqrt(x) % 1) == 0: 
    correct += 1

  if correct == 2: 
    print(x)
    break

Ausgabe: 499849

1
RIDDICC  30.04.2020, 14:30
@msmw22

ja... für n Programm, das eh nur 3 mal läuft, geht das so na klar auch... grins

0
RIDDICC  30.04.2020, 14:34
@msmw22

das ist jetzt meine total durchgestylte Version: LOL

#include <stdio.h>
#include <math.h>

int quer(int x) {
  if ((x%9)!=(43%9)) return -1;
  int s;
  for (s=0; x!=0; x/=10)
    s += x%10;
  return s;
}

int main() {
  int m = floor(sqrt(100e3));
  int M = ceil(sqrt(500e3));
  for (int i=m, q; i<=M; i++)
    if (quer(q=i*i)==43) printf("%d²=%d\n",i,q);
  return 0;
}
1
msmw22  30.04.2020, 14:34
@RIDDICC
for x in range(1, 708): 
  z = x*x 

  z_str = str(z) 
  e_num = 0 

  for e in str(z): 
    e_num += int(e)

  if e_num == 43: 
    print(z)

Habs nochmal optimiert. Da muss man nichtmal Wurzel berechnen.

Finde Python für solche Sachen irgendwie besser.

Sieht einfacher und effizienter aus.

1
RIDDICC  30.04.2020, 14:41
@msmw22
  1. wie bist du auf 1 und 708 gekommen? im Kopf? LOL ich benutz da lieber sqrt()... das ist näher an der Aufgabe...
  2. bei deiner neuen Lösung ist das „6 stellig“ verloren gegangen... aber es kommt trotzdem das Richtige raus...
  3. „sieht effizienter“ aus... hahah... indem du n integer in nen string umwandelst... LOL
0
msmw22  30.04.2020, 14:41
@msmw22
for x in range(317, 708):  
  e_num = 0 

  for e in str(x*x): 
    e_num += int(e)

  if e_num == 43: 
    print(x*x)

So. Ich lass es jetzt. :D Man konnte nochmal 2 Zeilen wegmachen. Viel kürzer geht es denke ich nicht

1
msmw22  30.04.2020, 14:43
@RIDDICC

Naja die erste Zahl die quadriert größer als 500.000 ist wäre 708.
Und wenn ich nur die Quersummen für die Quadratzahlen untersuche spart das Iterationen und Schreibarbeit

Durch die 317 und 708 grenzt man das auf sechstellig ein.

Weil die Zahlen quadriert alle im angegebenen Zahlenbereich liegen

1
RIDDICC  30.04.2020, 15:03
@msmw22

ja... aber dann kannste auch gleich „print(499849)“ schreiben... LOL

0
msmw22  30.04.2020, 15:06
@RIDDICC

Naja ne

Ich muss ja immer noch überprüfen ob die Quersumme 43 ist.

Aber wenn ich weis, dass die gesuchte Zahl im Bereich 100000 und 500000 liegt und es eine Quadratzahl ist, dann kann ich ja schon über die Wurzel ausrechnen

0
RIDDICC  30.04.2020, 17:44
@msmw22

du überprüfst ja auch nich, ob der Bereich 317..708 stimmt... LOL

0
RIDDICC  30.04.2020, 17:45
@RIDDICC

oops... in meinem Code sind floor() und ceil() vertauscht... LOL

0

Ich persönlich würde einfach meine Programmierkenntnisse einsetzen und schnell ein kleines Programm schreiben, was mir die Zahl ausrechnet.

Da selber zu Probieren etc. ist mir zu aufwendig.

Gibt es sonst irgendwelche Vorgaben?

Ich melde mich gleich nochmal mit dem Ergebnis ^^

Woher ich das weiß:Studium / Ausbildung – Studium Informatik / Softwaretechnik
Vivi212 
Fragesteller
 30.04.2020, 13:54

Nein leider nicht aber danke dir :)

0
msmw22  30.04.2020, 14:15
@Vivi212

Python3 Code:

import math

for x in range(100000, 499999): 
  correct = 0
  x_str = str(x)
  e_num = 0

  for e in x_str: 
    e_num += int(e)
    if e_num == 43: 
      correct += 1

  if (math.sqrt(x) % 1) == 0: 
    correct += 1

  if correct == 2: 
    print(x)

Ausgabe: 499849

0

Ich hab jetzt noch nicht gezielt nach einer Lösung gesucht, aber du könntest ja einfach mal ein wenig ausprobieren? Was schonmal klar ist: die meisten Stellen der Zahl müssen relativ hoch sein (also z.B. 7 oder 8 oder 9), damit die Quersumme 43 ergeben kann.

Also mein Computer berechnet folgende 6-stellige Zahlen als Quadratzahlen:

101124

101761

102400

103041

103684

104329

104976

105625

106276

106929

107584

108241

108900

109561

110224

110889

111556

112225

112896

113569

114244

114921

115600

116281

116964

117649

118336

119025

119716

120409

121104

121801

122500

123201

123904

124609

125316

126025

126736

127449

128164

128881

129600

130321

131044

131769

132496

133225

133956

134689

135424

136161

136900

137641

138384

139129

139876

140625

141376

142129

142884

143641

144400

145161

145924

146689

147456

148225

148996

149769

150544

151321

152100

152881

153664

154449

155236

156025

156816

157609

158404

159201

160000

160801

161604

162409

163216

164025

164836

165649

166464

167281

168100

168921

169744

170569

171396

172225

173056

173889

174724

175561

176400

177241

178084

178929

179776

180625

181476

182329

183184

184041

184900

185761

186624

187489

188356

189225

190096

190969

191844

192721

193600

194481

195364

196249

197136

198025

198916

199809

200704

201601

202500

203401

204304

205209

206116

207025

207936

208849

209764

210681

211600

212521

213444

214369

215296

216225

217156

218089

219024

219961

220900

221841

222784

223729

224676

225625

226576

227529

228484

229441

230400

231361

232324

233289

234256

235225

236196

237169

238144

239121

240100

241081

242064

243049

244036

245025

246016

247009

248004

249001

250000

251001

252004

253009

254016

255025

256036

257049

258064

259081

260100

261121

262144

263169

264196

265225

266256

267289

268324

269361

270400

271441

272484

273529

274576

275625

276676

277729

278784

279841

280900

281961

283024

284089

285156

286225

287296

288369

289444

290521

291600

292681

293764

294849

295936

297025

298116

299209

300304

301401

302500

303601

304704

305809

306916

308025

309136

310249

311364

312481

313600

314721

315844

316969

318096

319225

320356

321489

322624

323761

324900

326041

327184

328329

329476

330625

331776

332929

334084

335241

336400

337561

338724

339889

341056

342225

343396

344569

345744

346921

348100

349281

350464

351649

352836

354025

355216

356409

357604

358801

360000

361201

362404

363609

364816

366025

367236

368449

369664

370881

372100

373321

374544

375769

376996

378225

379456

380689

381924

383161

384400

385641

386884

388129

389376

390625

391876

393129

394384

395641

396900

398161

399424

400689

401956

403225

404496

405769

407044

408321

409600

410881

412164

413449

414736

416025

417316

418609

419904

421201

422500

423801

425104

426409

427716

429025

430336

431649

432964

434281

435600

436921

438244

439569

440896

442225

443556

444889

446224

447561

448900

450241

451584

452929

454276

455625

456976

458329

459684

461041

462400

463761

465124

466489

467856

469225

470596

471969

473344

474721

476100

477481

478864

480249

481636

483025

484416

485809

487204

488601

490000

491401

492804

494209

495616

497025

498436

499849

Such dir eine aus ;)