Finden Sie die Anzahl der Divisoren für eine Zahl in Reichweite

8

Ich habe eine Frage bezüglich des CountDiv Problems in Codility.

Das Problem ist: Schreibe eine Funktion:

%Vor%

gibt bei drei ganzen Zahlen A, B und K die Anzahl der ganzen Zahlen im Bereich [A..B] an, die durch K teilbar sind, d. h .:

%Vor%

Mein Code:

%Vor%

Ich verstehe nicht, warum ich falsch liege, besonders bei diesem Testfall:

%Vor%

wenn K =5 dann mit i=10 A<=i<=B und i%k =0 also warum sollte ich 0 haben? Problemstellung .

    
drevlav 04.09.2014, 09:12
quelle

16 Antworten

15

Dies ist die O (1) -Lösung, die den Test

bestanden hat %Vor%

Erläuterung: Anzahl der Ganzzahlen im Bereich [1 .. X] , die durch% teilbar sind. co_de% ist K . Also, im Bereich X/K , ist das Ergebnis [A .. B]

Wenn A 0 ist, weil 0 durch irgendeine positive Zahl teilbar ist, müssen wir es zählen.

    
Pham Trung 04.09.2014 14:10
quelle
11

Java-Lösung mit O (1) und 100% in Kodilität, Hinzufügen einiger Testfälle mit Lösungen für diejenigen, die versuchen wollen, andere Lösungen nicht zu sehen:

%Vor%     
moxi 26.07.2015 15:33
quelle
7
%Vor%

Nun, es ist ein völlig unleserlicher Oneliner, aber ich habe es gepostet, nur weil ich kann; -)

vervollständige den Java-Code hier:

%Vor%     
HelpVampire666 15.09.2014 13:36
quelle
6

Der Weg, dieses Problem zu lösen, ist Prefix Sums, da dies Teil dieses Abschnitts in Codility ist.

Ссылка

Ссылка

Mit dieser Technik kann man die Anzahl der ganzen Zahlen zwischen 0 und A, die durch K (A / K + 1) teilbar sind, von der Anzahl der ganzen Zahlen zwischen 0 und B abziehen, die durch K teilbar sind (B / K + 1) ).

Denken Sie daran, dass A inklusive ist, wenn es also teilbar ist, dann schließen Sie das als Teil des Ergebnisses ein.

Unten ist meine Lösung:

%Vor%     
cheshy 07.01.2016 21:51
quelle
2

Wenn ich die Frage richtig verstanden habe, glaube ich, dass dies die Lösung ist:

%Vor%

das Zurückgeben von -1 ist aufgrund einer ungültigen Operation (Division durch Null)

    
Assaf 04.09.2014 11:55
quelle
2

Das ist meine 100/100 Lösung:

Ссылка

%Vor%

Wichtige Aspekte dieser Lösung:

  1. Wenn A = 1, dann wird die Anzahl der Teiler in B / K gefunden.
  2. Wenn A = 0, dann wird die Anzahl der Teiler in B / K plus 1 gefunden.
  3. Wenn B = 0, dann gibt es nur ein i% K = 0, d. h. Null selbst.
Caesar Avgvstvs 11.11.2015 10:36
quelle
1

Ich bin nicht sicher, was Sie in Ihrem Code zu tun versuchen, aber einfacher wäre es, den Modulo-Operator (%) zu verwenden.

%Vor%     
user3906612 04.09.2014 12:35
quelle
1
%Vor%     
Abdullah 28.01.2015 08:16
quelle
1

Eine weitere O (1) -Lösung, die im Test 100% erreicht hat.

%Vor%     
Ganapathy Subramanian 18.06.2015 01:38
quelle
1

100/100 - eine weitere Variante der Lösung, basierend auf Pham Trungs Idee

%Vor%     
max3d 03.08.2015 13:20
quelle
1
%Vor%

Dies besteht den Test .

Es ist ähnlich wie " wie viele Zahlen von 2 bis 5 ". Wir alle wissen, dass es (5 - 2 + 1) ist. Der Grund für das Hinzufügen von 1 am Ende ist, dass die erste Zahl 2 zählt.

Nach A/K, B/K wird dieses Problem dasselbe wie oben. Hier müssen wir entscheiden, ob A in diesem Problem zählt. Nur wenn A%K == 0 zählt, müssen wir 1 zum Ergebnis b - a hinzufügen (das gleiche gilt für b+1 ).

    
Jialin Zou 18.10.2015 00:55
quelle
1

Hier ist meine Lösung, zwei Zeilen Java-Code.

%Vor%

Der Gedanke ist einfach.
a bezieht sich darauf, wie viele Zahlen in [1..A-1]
teilbar sind B / K bezieht sich darauf, wie viele Zahlen in [1..B]
teilbar sind 0 ist durch irgendeine ganze Zahl teilbar. Wenn A 0 ist, sollten Sie eins zur Antwort hinzufügen.

    
Allen Wang 31.05.2017 17:42
quelle
0
%Vor%     
drgeek 15.11.2017 13:55
quelle
0

Das ist meine 100/100 Lösung:

%Vor%

0 ist durch eine ganze Zahl teilbar. Wenn A also 0 ist, sollten Sie eins zur Antwort hinzufügen.

    
Mario_1412 19.01.2018 09:05
quelle
0

Hier ist meine Lösung und bekam 100%

%Vor%
  1. B / K gibt Ihnen die Gesamtzahl, die durch K [1..B]
  2. teilbar ist
  3. A / K gibt Ihnen die Gesamtzahl, die durch K [1..A]
  4. teilbar ist
  5. subtrahieren, dann erhalten Sie die Gesamtzahl, die durch K [A..B]
  6. teilbar ist
  7. check A% K == 0, falls wahr, dann + 1 zur Anzahl
Adrian Eka Fikri 01.02.2018 03:15
quelle
0

Dies ist die O (1) -Lösung (Es ist keine Überprüfung für die Teilbarkeit von a erforderlich)

%Vor%     
vikiiii 07.03.2018 15:52
quelle

Tags und Links