Припинення, суто періодичне чи з часом періодичне?


21

Вступ

Десяткова частина закінчується, якщо вона має кінцеву кількість десяткових цифр. Наприклад, 0,4 (2/5) закінчується, оскільки він має одну десяткову цифру.

Десяткова частина є чисто періодичною, якщо вона має нескінченну кількість десяткових цифр і не має десяткових цифр перед її каяттям (частина десяткової, яка повторюється.) Наприклад, 0.142857142857142… (1/7) є чисто періодичною, оскільки вона має повторення. 142857, який починає повторюватися відразу після десяткової крапки.

Десяткова частина зрештою є періодичною, якщо вона має нескінченну кількість десяткових цифр і має кінцеву кількість десяткових цифр до її повторення (частина десяткової, яка повторюється.) Наприклад, 0,16666666666666666… (1/6), врешті-решт періодична, оскільки її повторення 6 починає повторюватися після 1.

Ваше завдання

Напишіть програму або функцію, яка при заданих числах p і q (цілі числа, 0 <= p < q <= 100) визначатиме, чи є десятковий подання p / q закінчуваним, чисто періодичним чи зрештою періодичним.

Ви повинні вихід , aякщо він , закінчується (тобто 0,1), bякщо це чисто періодична (тобто 0,333 ...), або , cякщо це в кінцевому рахунку Періодична (тобто 0,166 ...), де a, bі cякі -то окремі, константні рядки вашого вибору.

Тестові кейси

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

Ви можете знайти всі тестові приклади тут .

Вам дозволяється вибирати свої власні 3 значення для виводу, але повинно бути зрозуміло, яке саме воно є.

Пам'ятайте, що це , тому виграє код з найменшою кількістю байтів.

Підказки

Припинення:

Найпростіша факторизація знаменника закінчуваного десяткового у найпростішому вигляді складається лише з 2s та 5s.

Чисто Періодично:

Проста факторизація суто періодичного знаменника десятків у найпростішій формі не включає жодних 2 або 5.

Врешті періодично:

Проста факторизація знаменника періодичних періодичних знаків у найпростішій формі включає щонайменше одне 2 або 5, але також включає інші числа.

Табло лідерів

Ось фрагмент стека для створення як звичайного табло, так і огляду переможців за мовою.

Щоб переконатися, що ваша відповідь відображається, будь ласка, почніть свою відповідь із заголовка, використовуючи наступний шаблон Markdown:

# Language Name, N bytes

де Nрозмір вашого подання. Якщо ви покращите свій рахунок, ви можете зберегти старі бали у заголовку, прокресливши їх. Наприклад:

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

Якщо ви хочете включити у свій заголовок декілька чисел (наприклад, тому що ваш результат - це сума двох файлів або ви хочете окремо перерахувати штрафні санкції для перекладача), переконайтесь, що фактичний результат - це останнє число у заголовку:

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

Ви також можете зробити ім'я мови посиланням, яке потім з’явиться у фрагменті таблиць лідерів:

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



2
Якби я думав, що це насправді дублікат, я б голосував ретельно. Є причина, що я використав слово « майже ».
Пітер Тейлор

1
задано дріб у вигляді p / q Дано як? Чи можна вважати чисельник і знаменник окремими аргументами функції?
Денніс

2
Чи можемо ми вивести непостійне значення, що відповідає певній умові, наприклад, що-небудь хибне для закінчення, 1 для чисто періодичного та щось більше, ніж 1 для зрештою періодичного?
ETHproductions

1
Ні, 1/13 є чисто періодичним, тому що кається "076923". 0 повторюється з каяткою.
Олівер Ні

Відповіді:


8

Желе , 10 байт

:gÆfḍ⁵ṢQ¬Ḅ

Приймає знаменник та чисельник (у такому порядку) як аргументи. Повертає 0 для закінчення, 1 для чисто періодичного та 2 для зрештою періодичного. Спробуйте в Інтернеті! або перевірити всі тестові випадки .

Як це працює

: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 байт

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

Повертає 0 для закінчення, істинний для чисто періодичного та хибний для зрештою періодичного.

Як це працює

Ми робимо тут насправді моделювання поділу вручну:

  1. a?...:0- Якщо чисельник дорівнює нулю, ми зупиняємось тут і повертаємось 0. Послідовність закінчується .
  2. (s[a]^=a)?...:x==a- Якщо ми вже зустрічалися з цим чисельником раніше, це означає, що послідовність є періодичною і повторюється назавжди. Ми зупиняємось тут і повертаємо або trueякщо aвоно дорівнює першому значенню xпослідовності ( чисто періодичне ), або falseякщо воно не ( зрештою періодичне ).
  3. f(a*10%b,b,s,x||a)- Ще, множимо чисельник aна 10. Остатню частину ділимо на знаменник b. І ми повторюємо процес, використовуючи цей залишок як новий чисельник. (Ми також передаємо aяк перше значення послідовності, якщо воно вже не зберігається x.)

Приклад

  • Синій : чисельник = 1
  • Зелений : знаменник = 7
  • Червоний : множення на 10
  • Чорний : залишки
  • Сірий : кількісні цифри (нас тут насправді не хвилюють, і наведений вище код зовсім не обчислює їх)

поділ


9

Пітон, 62 61 59 байт

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

Друкується 1 для періодичного періодичного періоду, 2 для чисто періодичного та 4 для закінчення.

Перевірте всі випадки випробувань на repl.it .


Захоплююче! Що робить *r?
ETHproductions

Він розпаковує кортеж r . f(1, *(2, 3), 4)еквівалентно f(1, 2, 3, 4).
Денніс

Отже, це буде 56 байт у JS:f=(n,d,...r)=>n in r?~(n>0?n==r[0]:2):f(10*n%d,d,...r,n)
ETHproductions

Моє погано, 63 байти (я забув, що inслужить зовсім іншому призначенню в JS, ніж у Python):f=(n,d,...r)=>~r.indexOf(r)?~(n>0?n==r[0]:2):f(10*n%d,d,...r,n)
ETHproductions

@ETHproductions Акуратний. Я здогадуюсь f=(n,d,...r)=>~(i=r.indexOf(n))?n&&!i:f(10*n%d,d,...r,n), працював би також.
Денніс

6

Perl, 49 46 45 байт

Включає +3 для -p

Заснований на елегантній ідеї Денніса , але реалізованій по-справжньому

Дайте вхідні цифри на STDIN

terminating.pl <<< "2 26"

termninating.pl:

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

Друкує 2, якщо закінчується. 1 якщо періодичний і нічого, якщо зрештою періодичний


Усі числа певної групи повинні давати однакове значення.
Олівер Ні

@OliverNi Вони роблять зараз
Тон Євангелія

3

Пакетна, 247 байт

@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

Використовує мій швидкий трюк gcd10 від дробу до точного десяткового . Очевидно, що я міг би зберегти купу байтів, використовуючи користувальницький вихідний формат.


Чому б вам просто не зробити, @if %d%==1 (echo T)else if %d%==%e% (echo P)else echo Eщоб зберегти 42 байти?
ETHproductions

Очевидно, що я міг би зберегти купу байтів, використовуючи користувальницький вихідний формат.
Олівер Ні

@ETHproductions Я думаю, що він цього не хоче, як зазначив Олівер цитатами.
Ерік Аутгольфер

3

JavaScript (ES6), 91 88 85 79 75 74 78 байт

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

Виходи NaNдля закінчення, 1для чисто періодичних і Infinityдля врешті періодичних.

Фрагмент тесту

Пояснення

Спочатку ділимо і n, і d на gcd (d, n) , щоб звести фракцію до найпростішої форми. Це дозволяє нам уникати ситуацій на зразок 2/6, коли результат інакше був би обчислений як чисто періодичний. Ми також визначаємо змінну t як gcd (d, 10) ; це буде використано пізніше.

Перша перевірка полягає в тому, чи n дорівнює 0, а d - 1 . Якщо n * (d-1) дорівнює 0, повертаємося +fабо NaN : частка закінчується .

Наступна перевірка - чи t дорівнює 1 . Якщо так, повертаємо 1 : частка є чисто періодичною .

Якщо t не дорівнює 1 , ділимо d на t , запускаємо всю функцію ще раз і ділимо на 0. Якщо n / (d / t) закінчується, це повертає NaN / 0 = NaN : частка закінчується . В іншому випадку він повертає 1/0 = Нескінченність : частка з часом періодична .


Де зведення до найпростішої форми?
Тон Євангелія

Виправлено @TonHospel.
ETHproductions

@Arnauld Я не впевнений, що ти маєш на увазі. Він повертає Infinityвсі ці значення.
ETHproductions

@Arnauld Так, людино, я думав, я можу піти, ніколи не налаштовуючись n... Дякую, що вказав на це.
ETHproductions

3

Математика, 41 байт

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

Виходи, {3,1,2}якщо вхід має закінчується десяткове розширення, {2,3,1}якщо вхід має чисто періодичне десяткове розширення і {3,2,1}якщо вхід має з часом періодичне десяткове розширення.

Виходячи з підступного трюку: якщо dзнаменник дробу найнижчим рівнем, то найбільший спільний дільник dі 10^dдорівнює, dякщо dмає основну факторизацію лише 2s та 5s; дорівнює, 1якщо dв основній факторизації немає ні 2s, ні 5s; і дорівнює деякому цілому числу між, якщо dмає 2s / 5s та інші прайси.

OrderingФункція тільки повідомляє , де найменші, поруч маленькі, і великі елементи трійки є, з зв'язку зламаною вліво-вправо.

Помилка: повертає варіант-вихід {1,2,3}замість того, {3,1,2}якщо вхід 0.

Математика, 46 байт, перекручений

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

Повертає, a[[1]]якщо вхід має закінчується десяткове розширення, b[[1]]якщо вхід має чисто періодичне десяткове розширення і b[a]якщо вхід має з часом періодичне десяткове розширення. У всіх випадках помилка!

Як і вище, ми хочемо знати, чи дорівнює цей найбільший спільний дільник 1, d або десь посередині. Логарифм базового d цього gcd дорівнює 0, 1 або щось середнє.

Тепер ми починаємо мучити Mathematica. b[a][[n]]позначає nту частину виразу b[a]. Так b[a][[1]]повертається a; b[a][[0]]повертає b; і b[a][[x]], де xчисло між 0 і 1, змушує Mathematica кидати помилку "Частина :: pkspec1: Вираз xне можна використовувати як специфікацію частини." і повертається b[a][[x]]неоціненою.

Це вже належним чином відрізняє три випадки, за винятком того, що вихід для періодичного періоду, який зрештою є b[a][[x]], є непостійним, оскільки xє власне логарифмом чогось. Тоді ми застосовуємо [[1]]вже описані результати. Через те, як Mathematica внутрішньо представляє b[a][[x]], результат b[a][[x]][[1]]просто b[a]. З іншого боку, застосування [[1]]до aрезультатів в іншій помилці "Частина :: partd: Специфікація деталі a [[1]] довша за глибину об'єкта." і повертається a[[1]]неоціненою (і аналогічно для b).

Недолік: брехня про вхід 0, повернення b[a]замість a[[1]].


2

C 173 байт

Бере два цілих числа зі stdin, друкує 1 для чисто періодичного, -1 для зрештою періодичного та 0 для закінчення.

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);}

Безголівки:

// 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;
}   

Напівгольф:

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

Власне , 15 байт

Це засновано на відповіді Дженніса «Желе» . 0 закінчується, 1 - чисто періодичний, а 2 - зрештою періодичний. Пропозиції з гольфу вітаються. Спробуйте в Інтернеті!

▼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

Математика, 44 байти

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

Повертається Nullдля припинення, Trueдля чисто періодичного та Falseдля врешті періодичного.

Пояснення

RealDigits

Знайдіть десяткове розширення N. (повторні цифри оточені додатковою головою List {}).

ListQ@Last@#

Перевірте, чи є останнім елементом десяткового розширення a List.

Length@#==1

Якщо вказана вище умова True, перевірте, чи складається все десяткове розширення з однієї речі. (A Listвважається однією сутністю). (повертається Trueабо False)

(Якщо умова є False, то Nullповертається a , оскільки для третього аргументу немає If)


1

Pyth , 31 27 байт

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

Вхідні дані

4,12

Ви можете спробувати тут . Друкується 1 для періодичного періодичного періоду, 2 для чисто періодичного та 0 для закінчення. Це мій перший відповідь у кодегольфі. Будь-які пропозиції вітаються.

Пояснення

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

Зауважимо, що [2,3] відфільтровано за [2,5] = [2], але [2,3,5] - [2,5] = [3].


1

PARI / GP, 64 байти

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

Виводить нічого для закінчення, 0 для чисто і 1 для періодичного періодичного періоду.

Не дуже фантазії, я сподівався на щось краще, коли почав.


1

05AB1E , 16 11 байт

Збережено 5 байт завдяки @Adnan!

¿²r/fTrÖbÙJ

Друкує 0 для чисто періодичного, 1 для припинення та 10 для періодичного періоду.

Пояснення:

                 # 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

Введення приймається як p новий рядок q .

Спробуйте в Інтернеті!


Приємно бачити, що ви використовуєте 05AB1E :). Osabie також використовує неявне введення, що дозволяє нам видалити перші два I. Крім того, постійна зумовлені , щоб 10це T. Те саме 2B, що є b:).
Аднан

Ви також можете використовувати вхідні регістри, що дає нам ¿²r/fTrÖbÙJяк кінцевий код :).
Аднан

1

PHP, 126 байт

$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;

Друкується 0 для припинених і 1 для чисто періодичних 2 для врешті-решт. Дозвольте мені пояснити, якщо чисельник двічі в масиві, тут починається періодичний сеанс, якщо він припиняється, echo end($a);значення є, 0 якщо ви мені не довіряєте, кладіть $t=count($a)>$d?2:0;у цикл

Для того, щоб зробити його більш ясним , будь ласка , додайте print_r($a);або var_dump($a);або json_encode($a);після циклу

ви можете побачити один чисельник двічі або нуль в кінці масиву, якщо чисельник два рази рахує елементи між двома елементами, і ви можете отримати довжину періодики, і ви можете побачити позицію за першим чисельником, де починається періодика

Тож після цього ми можемо знайти положення та довжину періодичної послідовності з if($t){echo $p=array_search(end($a),$a);echo $l=count($a)-$p-1;}

Візуалізуйте періодику

$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

Вихідні дані візуалізують періодичний термін

1/18
   _
0.05

1/12
    _
0.083

1/13
  ______
0.076923

1/14
   ______
0.0714285

Інший спосіб зі 130 байтами

$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;

Розширена версія

$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 ти маєш на увазі, що я повинен змінити код, щоб відповісти на інше питання?
Йорг Гюльсерманн

Ну, я просто думав, що на інше питання немає відповіді PHP; можливо, ви хочете надати його.
Ніл

@RosLuP Для прикладу 3/53 цей масив буде створено[3,30,35,32,2,20,41,39,19,31,45,26,48,3]
Jörg Hülsermann

3/103 = 0,0291262135922330097087378640776699029126213592233009708, і тому в той же період може з’являтися однакова цифра (наприклад, цифра 7 між 00 ... 00 вище), але якщо масив, про який ви говорите, - це не один з цифр, а масив {d = 10 * (d% b)}, де цифра d / c, ніж я думаю, це нормально, є лише одне значення d_i на кожен період ...
RosLuP
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.