Terminato, puramente periodico o eventualmente periodico?


21

introduzione

Un decimale termina se ha un numero finito di cifre decimali. Ad esempio, 0.4 (2/5) sta terminando perché ha una cifra decimale.

Un decimale è puramente periodico se ha un numero infinito di cifre decimali e non ha cifre decimali prima del suo ripetitore (la parte del decimale che si ripete.) Ad esempio, 0,142857142857142… (1/7) è puramente periodico perché ha un ripetizione 142857, che inizia a ripetere immediatamente dopo il punto decimale.

Un decimale è infine periodico se ha un numero infinito di cifre decimali e ha un numero finito di cifre decimali prima del suo ripetitore (la parte del decimale che si ripete.) Ad esempio, 0.166666666666666… (1/6) è infine periodico perché è ripeti 6 inizia a ripetere dopo un 1.

Il tuo compito

Scrivi un programma o una funzione che, quando vengono indicati i numeri p e q (numeri interi, 0 <= p < q <= 100), determinerà se la rappresentazione decimale di p / q sta terminando, puramente periodica o infine periodica.

È necessario uscita ase si tratta di terminazione (cioè 0,1), bse è puramente periodico (cioè 0,333 ...), o cse si tratta di fine periodica (cioè 0,166 ...), dove a, be csono eventuali distinte, le stringhe costanti di vostra scelta.

Casi test

0/1 => Terminating
0/2 => Terminating
1/2 => Terminating
0/3 => Terminating
1/3 => Purely Periodic
2/3 => Purely Periodic
0/4 => Terminating
1/4 => Terminating
2/4 => Terminating
3/4 => Terminating
0/5 => Terminating
1/5 => Terminating
2/5 => Terminating
3/5 => Terminating
4/5 => Terminating
0/6 => Terminating
1/6 => Eventually Periodic
2/6 => Purely Periodic
3/6 => Terminating
4/6 => Purely Periodic
5/6 => Eventually Periodic
0/7 => Terminating
1/7 => Purely Periodic
2/7 => Purely Periodic
3/7 => Purely Periodic
4/7 => Purely Periodic
5/7 => Purely Periodic
6/7 => Purely Periodic
0/8 => Terminating
1/8 => Terminating
2/8 => Terminating
3/8 => Terminating
4/8 => Terminating
5/8 => Terminating
6/8 => Terminating
7/8 => Terminating
0/9 => Terminating
1/9 => Purely Periodic
2/9 => Purely Periodic
3/9 => Purely Periodic
4/9 => Purely Periodic
5/9 => Purely Periodic
6/9 => Purely Periodic
7/9 => Purely Periodic
8/9 => Purely Periodic
0/10 => Terminating
1/10 => Terminating
2/10 => Terminating
3/10 => Terminating
4/10 => Terminating
5/10 => Terminating
6/10 => Terminating
7/10 => Terminating
8/10 => Terminating
9/10 => Terminating
0/11 => Terminating
1/11 => Purely Periodic
2/11 => Purely Periodic
3/11 => Purely Periodic
4/11 => Purely Periodic
5/11 => Purely Periodic
6/11 => Purely Periodic
7/11 => Purely Periodic
8/11 => Purely Periodic
9/11 => Purely Periodic
10/11 => Purely Periodic
0/12 => Terminating
1/12 => Eventually Periodic
2/12 => Eventually Periodic
3/12 => Terminating
4/12 => Purely Periodic
5/12 => Eventually Periodic
6/12 => Terminating
7/12 => Eventually Periodic
8/12 => Purely Periodic
9/12 => Terminating
10/12 => Eventually Periodic
11/12 => Eventually Periodic
0/13 => Terminating
1/13 => Purely Periodic
2/13 => Purely Periodic
3/13 => Purely Periodic
4/13 => Purely Periodic
5/13 => Purely Periodic
6/13 => Purely Periodic
7/13 => Purely Periodic
8/13 => Purely Periodic
9/13 => Purely Periodic
10/13 => Purely Periodic
11/13 => Purely Periodic
12/13 => Purely Periodic
0/14 => Terminating
1/14 => Eventually Periodic
2/14 => Purely Periodic
3/14 => Eventually Periodic
4/14 => Purely Periodic
5/14 => Eventually Periodic
6/14 => Purely Periodic
7/14 => Terminating
8/14 => Purely Periodic
9/14 => Eventually Periodic
10/14 => Purely Periodic
11/14 => Eventually Periodic
12/14 => Purely Periodic
13/14 => Eventually Periodic
0/15 => Terminating
1/15 => Eventually Periodic
2/15 => Eventually Periodic
3/15 => Terminating
4/15 => Eventually Periodic
5/15 => Purely Periodic
6/15 => Terminating
7/15 => Eventually Periodic
8/15 => Eventually Periodic
9/15 => Terminating
10/15 => Purely Periodic
11/15 => Eventually Periodic
12/15 => Terminating
13/15 => Eventually Periodic
14/15 => Eventually Periodic

Puoi trovare tutti i casi di test qui .

Puoi scegliere i tuoi 3 valori per l'output, ma deve essere chiaro su quale sia.

Ricorda, questo è , quindi vince il codice con il minor numero di byte.

suggerimenti

terminazione:

La scomposizione in fattori primi del denominatore di un decimale finale nella forma più semplice consiste solo di 2 e 5 secondi.

Puramente periodico:

La fattorizzazione primaria del denominatore di un decimale puramente periodico nella forma più semplice non include 2 o 5 secondi.

Eventualmente periodico:

La scomposizione in fattori primi del denominatore di un decimale eventualmente periodico nella forma più semplice include almeno un 2 o 5, ma include anche altri numeri.

Classifiche

Ecco uno snippet di stack per generare sia una classifica regolare che una panoramica dei vincitori per lingua.

Per assicurarti che la tua risposta venga visualizzata, ti preghiamo di iniziare la risposta con un titolo, utilizzando il seguente modello Markdown:

# Language Name, N bytes

dov'è Nla dimensione del tuo invio. Se si migliora il punteggio, è possibile mantenere i vecchi punteggi nel titolo, colpendoli. Per esempio:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Se si desidera includere più numeri nell'intestazione (ad es. Perché il punteggio è la somma di due file o si desidera elencare separatamente le penalità del flag dell'interprete), assicurarsi che il punteggio effettivo sia l' ultimo numero nell'intestazione:

# Perl, 43 + 2 (-p flag) = 45 bytes

Puoi anche rendere il nome della lingua un collegamento che verrà quindi visualizzato nello snippet della classifica:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes



2
Se avessi pensato che fosse effettivamente un duplicato, avrei espresso un voto vicino. C'è una ragione per cui ho usato la parola " quasi ".
Peter Taylor,

1
data una frazione nella forma p / q Dato come? Possiamo prendere numeratore e denominatore come argomenti di funzione separati?
Dennis,

2
Possiamo produrre un valore non costante che soddisfa una condizione specifica, come qualcosa di falso per la risoluzione, 1 per puramente periodico e qualcosa di più grande di 1 per eventualmente periodico?
ETHproductions

1
No, 1/13 è puramente periodico perché il ripetitore è '076923'. Lo 0 si ripete con il ripetitore.
Oliver Ni,

Risposte:


8

Gelatina , 10 byte

:gÆfḍ⁵ṢQ¬Ḅ

Accetta denominatore e numeratore (in quell'ordine) come argomenti. Restituisce 0 per terminare, 1 per puramente periodico e 2 per eventualmente periodico. Provalo online! o verifica tutti i casi di test .

Come funziona

:gÆfḍ⁵ṢQ¬Ḅ  Main link. Arguments: d (denominator), n (numerator)

 g          Compute the GCD of d and n.
:           Divide d by the GCD, yielding the denominator of the simplified form.
  Æf        Yield all prime factors of the previous result.
    ḍ⁵      Test 10 for divisibility by each prime factor.
            This yields 1 for 2 and 5, 0 for all other primes.
      Ṣ     Sort the resulting Booleans.
       Q    Unique; deduplicate the sorted Booleans.
        ¬   Logical NOT; replace 0 with 1 and vice versa to yield one of the
            following arrays.
              [    ]  <- no prime factors (denominator 1)
              [   0]  <- only 2 and 5
              [1   ]  <- neither 2 nor 5
              [1, 0]  <- mixed
         Ḅ  Unbinary; convert from base 2 to integer.
            This maps [] and [0] to 0, [1] to 1, and [1, 0] to 2.

11

JavaScript (ES6), 70 .. 68 53 byte

f=(a,b,s=[],x)=>a?(s[a]^=a)?f(a*10%b,b,s,x||a):x==a:0

Restituisce 0 per terminare, vero per puramente periodico e falso per eventualmente periodico.

Come funziona

Quello che stiamo facendo qui è in realtà simulare una divisione a mano:

  1. a?...:0- Se il numeratore è zero, ci fermiamo qui e ritorniamo 0. La sequenza sta terminando .
  2. (s[a]^=a)?...:x==a- Se abbiamo già incontrato questo numeratore prima, significa che la sequenza è periodica e si ripeterà per sempre. Ci fermiamo qui e restituiamo truese aè uguale al primo valore xdella sequenza ( puramente periodico ) o falsese non lo è ( eventualmente periodico ).
  3. f(a*10%b,b,s,x||a)- Altrimenti, moltiplichiamo il numeratore aper 10. Calcoliamo il resto della divisione per il denominatore b. E ripetiamo il processo usando questo resto come nuovo numeratore. (Passiamo anche acome primo valore della sequenza se non è già memorizzato in x.)

Esempio

  • Blu : numeratore = 1
  • Verde : denominatore = 7
  • Rosso : moltiplicazioni per 10
  • Nero : resti
  • Grigio : cifre quozienti (non ci interessa davvero qui, e il codice sopra non le calcola affatto)

division


9

Python, 62 61 59 byte

f=lambda n,d,r=[0,0]:(r[:3]+r).count(n)or f(10*n%d,d,r+[n])

Stampa 1 per eventualmente periodico, 2 per puramente periodico e 4 per terminare.

Verificare tutti i casi di test su repl.it .


Affascinante! Cosa fa *r?
ETHproductions

Disimballa la tupla r . f(1, *(2, 3), 4)è equivalente a f(1, 2, 3, 4).
Dennis,

Quindi questo sarebbe 56 byte in JS:f=(n,d,...r)=>n in r?~(n>0?n==r[0]:2):f(10*n%d,d,...r,n)
ETHproductions

Mio cattivo, 63 byte (ho dimenticato che ha inuno scopo molto diverso in JS rispetto a Python):f=(n,d,...r)=>~r.indexOf(r)?~(n>0?n==r[0]:2):f(10*n%d,d,...r,n)
ETHproductions

@ETHproductions Neat. Immagino f=(n,d,...r)=>~(i=r.indexOf(n))?n&&!i:f(10*n%d,d,...r,n)che funzionerebbe anche.
Dennis,

6

Perl, 49 46 45 byte

Include +3 per -p

Basato sull'idea elegante di Dennis ma attuato in modo perlish

Fornire numeri di input su STDIN

terminating.pl <<< "2 26"

termninating.pl:

#!/usr/bin/perl -p
/ /;1until$a{$_=$_*10%$' or$`}++;$_=$a{$`}

Stampa un 2 se termina. 1 se periodico e nulla se infine periodico


Tutti i numeri in un determinato gruppo devono dare lo stesso valore.
Oliver Ni,

@OliverNi Lo fanno ora
Ton Hospel,

3

Lotto, 247 byte

@set/af=%1,g=%2
:g
@if not %f%==0 set/ah=g,g=f,f=h%%g&goto g
@set/ae=d=%2/g
:l
@set/ag=-~!(d%%2)*(!(d%%5)*4+1)
@if not %g%==1 set/ad/=g&goto l
@if %d%==1 (echo Terminating)else if %d%==%e% (echo Purely Periodic)else echo Eventually Periodic

Usa il mio trucco gcd10 veloce dalla frazione all'esatto decimale . Ovviamente ho potuto salvare un sacco di byte utilizzando un formato di output personalizzato.


Perché non lo fai solo @if %d%==1 (echo T)else if %d%==%e% (echo P)else echo Eper salvare 42 byte?
ETHproductions

Ovviamente ho potuto salvare un sacco di byte utilizzando un formato di output personalizzato.
Oliver Ni,

@ETHproductions Penso che non voglia, come ha notato Oliver con una citazione.
Erik the Outgolfer,

3

JavaScript (ES6), 91 88 85 79 75 74 78 byte

f=(n,d,g=(a,b)=>b?g(b,a%b):a,t=g(d/=c=g(n,d),10))=>n*~-d?t-1?f(n/c,d/t)/0:1:+f

Uscite NaNper terminazione, 1per puramente periodica e Infinityper eventuale periodica.

Test snippet

Spiegazione

Innanzitutto, dividiamo n e d per gcd (d, n) , per ridurre la frazione nella sua forma più semplice. Questo ci consente di evitare situazioni come 2/6 in cui il risultato sarebbe altrimenti calcolato come puramente periodico. Definiamo anche la variabile t come gcd (d, 10) ; questo sarà usato in seguito.

Il primo controllo è se n è 0 o d è 1 . Se n * (d-1) è 0, ritorniamo +f, o NaN : la frazione sta terminando .

Il prossimo controllo è se t è 1 . In tal caso, restituiamo 1 : la frazione è puramente periodica .

Se t non è 1 , dividiamo d per t , eseguiamo nuovamente l'intera funzione e dividiamo per 0. Se n / (d / t) sta terminando, questo restituisce NaN / 0 = NaN : la frazione sta terminando . Altrimenti, restituisce 1/0 = Infinito : la frazione è infine periodica .


Dov'è la riduzione alla forma più semplice?
Ton Hospel,

@TonHospel Risolto.
ETHproductions

@Arnauld Non sono sicuro di cosa intendi. Restituisce Infinityper tutti quei valori.
ETHproductions

@Arnauld Aw, amico, pensavo di riuscire a cavarmela senza mai adattarmi n... Grazie per averlo sottolineato.
ETHproductions

3

Mathematica, 41 byte

Ordering@{d=Denominator@#,GCD[d,10^d],1}&

Emette {3,1,2}se l'input ha un'espansione decimale finale, {2,3,1}se l'input ha un'espansione decimale puramente periodica e {3,2,1}se l'input ha un'espansione decimale eventualmente periodica.

Basato sul trucco subdolo: se dè il denominatore di una frazione in termini più bassi, allora il più grande divisore comune di ded è 10^duguale dse dha solo 2s e 5s nella sua scomposizione in fattori primi; è uguale a 1se dnon ha né 2s né 5s nella sua scomposizione in fattori primi; e equivale a un numero intero compreso tra if d2s / 5s e altri numeri primi.

La Orderingfunzione riporta solo dove sono gli elementi più piccoli, i più piccoli e quelli più grandi della tripla, con i legami spezzati da sinistra a destra.

Difetto: restituisce l'output della variante {1,2,3}anziché {3,1,2}se l'input è 0.

Mathematica, 46 byte, perversa

b[a][[Log[d=Denominator@#,GCD[d,10^d]]]][[1]]&

Restituisce a[[1]]se l'input ha un'espansione decimale finale, b[[1]]se l'input ha un'espansione decimale puramente periodica e b[a]se l'input ha un'espansione decimale eventualmente periodica. Genera un errore in tutti i casi!

Come sopra, vogliamo sapere se quel massimo comune divisore è uguale a 1, d o in qualche punto intermedio. Il logaritmo base-d di quel gcd è uguale a 0, 1 o qualcosa in mezzo.

Ora iniziamo a torturare Mathematica. b[a][[n]]indica la nparte dell'espressione b[a]. Quindi b[a][[1]]ritorna a; b[a][[0]]ritorni b; e b[a][[x]], dove xè un numero compreso tra 0 e 1, Mathematica genera l'errore "Part :: pkspec1: l'espressione xnon può essere utilizzata come specifica della parte". e restituisce non b[a][[x]]valutato.

Questo distingue già in modo appropriato i tre casi, tranne per il fatto che l'output per il caso eventualmente periodico è b[a][[x]], che non è costante perché xè il logaritmo effettivo di qualcosa. Quindi quindi applichiamo [[1]]alle uscite già descritte. A causa di come Mathematica rappresenta internamente b[a][[x]], il risultato b[a][[x]][[1]]è semplicemente b[a]. D'altra parte, applicando [[1]]ai arisultati un diverso errore "Parte :: parte: la specifica della parte a [[1]] è più lunga della profondità dell'oggetto." e restituisce non a[[1]]valutato (e similmente per b).

Difetto: bugie sull'ingresso 0, che restituisce b[a]invece di a[[1]].


2

C 173 byte

Prende due numeri interi da stdin, stampa 1 per puramente periodica, -1 per eventualmente periodica e 0 per terminazione.

int r;main(_,n,d){_-1?_-2?d-1?d%2&&d%5?r=1:d%2?main(3,n,d/5):main(3,n,d/2),r=r?-1:0:r=0:d?main(2,d,n%d):r=n:scanf("%d %d",&n,&d),main(2,n,d),main(3,n/r,d/r),printf("%d",r);}

Ungolfed:

// returns 1 for periodic, 0 for terminating, <0 for eventually periodic
int periodic(int num, int den) { // 3
    if (den == 1) return 0;
    if (den % 2 && den % 5) // pure periodic
        return 1;
    if (den % 2) return periodic(num,den/5) ? -1 : 0;
    return periodic(num,den/2) ? -1 : 0;
}

int gcd(int num, int den) { // 2
    if (den) 
        return gcd(den,num%den);
    return num;
}

int main(n,d) // 1
{
    scanf("%d %d",&n,&d);
    printf("%d",periodic(n/gcd(n,d),d/gcd(n,d)));
    return 0;
}   

Half-giocato a golf:

int r;main(_,n,d){
    _-1? 
    _-2?
    // periodic
    d-1?
        d%2&&d%5?
            r=1:
                d%2?
                    main(3,n,d/5): //periodic
                    main(3,n,d/2), //periodic
                        r=r?-1:0:
                r=0
    // gcd
    :d?main(2,d,n%d):r=n // gcd
    // main
    :scanf("%d %d",&n,&d),
     main(2,n,d), // gcd
     main(3,n/r,d/r), // periodic
     printf("%d",r);
}

2

In realtà , 15 byte

Questo si basa sulla risposta Jelly di Dennis . 0 sta terminando, 1 è puramente periodico e 2 è infine periodico. Suggerimenti di golf benvenuti. Provalo online!

▼Ny9u♀%SR♂b╔2@¿

Ungolfing

      Implicit input [a, b].
▼     Divide a and b by gcd(a,b).
Ny    Get the unique prime divisors of the reduced denominator.
9u    Push 10.
♀%    10 mod every member of uniq_p_d.
SR    Sort the mods and reverse.
♂b    Logical buffer. Converts every (10 % p != 0) to 1, and everything else to 0.
        Meaning if 2 or 5 divided b, they are now 0, and every other prime is now 1.
╔     Uniquify the list.
        If terminating, return [0].
        If purely periodic, return [1].
        If eventually periodic, return [1, 0].
        Else, (if b was 1), return [].
2@¿   Convert from binary to decimal. Return 0, 1, or 2.
      Implicit return.

1

Mathematica, 44 byte

If[ListQ@Last@#,Length@#==1]&@@RealDigits@#&

ritorna Null per Terminazione, Trueper puramente periodica e Falseper eventuale periodica.

Spiegazione

RealDigits

Trova l'espansione decimale di N. (le cifre ripetute sono circondate da una testa in più List {} ).

ListQ@Last@#

Controlla se l'ultimo elemento dell'espansione decimale è a List .

Length@#==1

Se la condizione precedente è True, controlla se l'intera espansione decimale è costituita da una cosa. (UNList conta come un'entità). (ritorna Trueo False)

(Se la condizione è False, quindi Nullviene restituito un perché non esiste un terzo argomento per If)


1

Pyth , 31 27 byte

AQ={P/HiGH?l@H=j25T?l-HT1Z2

Ingresso

4,12

Puoi provarlo qui . Stampa 1 per eventualmente periodico, 2 per puramente periodico e 0 per terminazione. Questa è la prima volta che rispondo in codegolf. Eventuali suggerimenti sono ben accetti

Spiegazione

AQ                                              // 1st element to G and 2nd element to H
    ={P                                         // Assign unique prime factors to H
        /H                                      // Simplify denominator
            iGH                                 // Find GCD
                ?l                              // Check length of filtered H
                    @H                          // Filter H by Y
                        =j25T                   // Assign a set [2,5] to T
                                ?l-HT           // Check length of H - T
                                        1Z2     // Print result

Si noti che [2,3] filtrato per [2,5] = [2] ma [2,3,5] - [2,5] = [3].


1

PARI / GP, 64 byte

f(x,y)=if(setminus(factor(y=y/gcd(x,y))[,1]~,[2,5]),gcd(y,10)>1)

Non genera nulla per la terminazione, 0 per puramente e 1 per infine periodico.

Non molto elegante, speravo in qualcosa di meglio quando ho iniziato.


1

05AB1E , 16 11 byte

5 byte salvati grazie a @Adnan!

¿²r/fTrÖbÙJ

Stampa 0 per Purely Periodic, 1 per Terminating e 10 per Eventual Periodic.

Spiegazione:

                 # Implicit input
                 # Implicit input
  ¿              # Take GCD of numbers
   ²             # Push top value from input register
    r            # Reverse stack order
     /           # Divide (denominator by GCD)
      f          # Find unique prime factors
       TrÖ       # Test 10 for divisibility
          b      # Convert (True -> 1, False -> 0)
           Ù     # Deduplicate array
            J    # Join chars in array
                 # Implicit print

L'input viene preso come p newline q .

Provalo online!


Piacere di vederti con 05AB1E :). Osabie utilizza anche input impliciti che ci consentono di rimuovere i primi due I. Inoltre, una costante predefinita 10è T. Lo stesso per 2B, che è b:).
Adnan,

Puoi anche usare i registri di input, che ci danno ¿²r/fTrÖbÙJcome codice finale :).
Adnan,

1

PHP, 126 byte

$d=$argv[2];$a[]=$n=$argv[1];while($n%$d&&!$t){$n*=10;$t=in_array($n%=$d,$a);$a[]=$n;}if($a[1]&&$t)$t+=$a[0]!=end($a);echo+$t;

Stampa 0 per terminato e 1 per 2 puramente periodici per eventualmente. Lasciami spiegare se un numeratore è due volte nell'array qui inizia la sessione periodica se viene terminato il echo end($a);valore è 0 Se non ti fidi di me messo $t=count($a)>$d?2:0;nel ciclo

Per rendere più chiaro aggiungere print_r($a);o var_dump($a);o json_encode($a);dopo il ciclo

puoi vedere un numeratore due volte o uno zero alla fine dell'array se un numeratore conta due volte gli elementi tra i due elementi e puoi ottenere la lunghezza del periodico e puoi vedere la posizione dal primo numeratore in cui inizia il periodico

Quindi dopo possiamo trovare la posizione e la lunghezza della sequenza periodica con if($t){echo $p=array_search(end($a),$a);echo $l=count($a)-$p-1;}

Visualizza il periodico

$d=$argv[2];
$a[]=$n=$argv[1]; #array numerator
$r[]=$n/$d^0; #array result of the division
$r[]=".";
while($n%$d&&!$t){
    $n*=10; 
    $n-=$d*$r[]=$n/$d^0;
    $t=in_array($n%=$d,$a); #stop if numerator is twice 
    $a[]=$n;
}
if($a[1]&&$t)$t+=$a[0]!=end($a); #periodic term starts directly?
if($t){
    echo $p=array_search(end($a),$a)."\n"; #output the beginning position of the periodic term
    echo $l=count($a)-$p-1; #output the length of the periodic term
    echo "\n";
    echo str_repeat(" ",2+$p).str_repeat("_",$l-1)."\n"; #visualize the periodic term
    #echo join(array_slice($r,0,1+$p)).join(array_slice($r,1+$p))."\n";# if you want only the periodic term 
    echo join($r); #result if the division
}
echo+$t; # 0 terminated 1+2 periodic 2 periodic start not directly

L'output visualizza il termine periodico

1/18
   _
0.05

1/12
    _
0.083

1/13
  ______
0.076923

1/14
   ______
0.0714285

Un altro modo con 130 byte

$r=bcdiv(($z=$argv)[1],$z[2],400);for($p=2;$i++<200;)if(substr($r,2,$i)==substr($r,2+$i,$i))$p=1;echo strlen(rtrim($r,0))<50?0:$p;

Versione estesa

$r=bcdiv(($z=$argv)[1],$z[2],400); # 100 is the maximal denominator 
# we need a string length with the double value of the sum the length from 1 until the denominator
for($p=2;$i++<200;)if(substr($r,2,$i)==substr($r,2+$i,$i))$p=1;
# all results begin with 0. 
#take two substrings with the same length after that and comparize both. 
#if we found 2 same substrings we have a periodic which starts at the first decimal place
echo strlen(rtrim($r,0))<50?0:$p; 
# if we can trim the length of the result we have a terminated result


@Neil intendi che dovrei modificare il codice per rispondere all'altra domanda?
Jörg Hülsermann,

Beh, stavo solo pensando che l'altra domanda non abbia una risposta PHP; forse ti piacerebbe fornirne uno.
Neil,

@RosLuP Nell'esempio 3/53 verrà creato questo array[3,30,35,32,2,20,41,39,19,31,45,26,48,3]
Jörg Hülsermann,

3/103 = 0,0291262135922330097087378640776699029126213592233009708 e così nello stesso periodo può apparire la stessa cifra (ad esempio la cifra 7 tra 00 ... 00 sopra) Ma se l'array di cui parli non è quello della cifra ma l'array del {d = 10 * (d% b)} dove la cifra è d / c di quanto penso sia ok c'è un solo valore d_i per ogni periodo ...
RosLuP
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.