PHP Program to Count Rotations Divisible by 8
Last Updated :
23 Jul, 2025
Given a large positive number as a string, the task is to count all rotations of the given number which are divisible by 8.
Examples:
Input : 8
Output : 1
Input : 40
Output : 1
Rotation : 40 is divisible by 8
04 is not divisible by 8
Input : 13502
Output : 0
No rotation is divisible by 8
Input : 43262488612
Output : 4
Approach
For a large numbers, it is difficult to rotate and divide each number by 8. Therefore, ‘divisibility by 8’ property is used which says that a number is divisible by 8 if the last 3 digits of the number is divisible by 8. Here we do not actually rotate the number and check last 8 digits for divisibility, instead we count consecutive sequence of 3 digits (in circular way) which are divisible by 8.
Illustration
Consider a number 928160. Its rotations are 928160, 092816, 609281, 160928, 816092, 281609.
Now form consecutive sequence of 3-digits from the original number 928160 as mentioned in the
approach.
3-digit: (9, 2, 8), (2, 8, 1), (8, 1, 6), (1, 6, 0),(6, 0, 9), (0, 9, 2)
We can observe that the 3-digit number formed by the these sets, i.e., 928, 281, 816, 160, 609, 092, are present in the last 3 digits of some rotation.
Thus, checking divisibility of these 3-digit numbers gives the required number of rotations.
PHP
<?php
// PHP program to count all
// rotations divisible by 8
// function to count of all
// rotations divisible by 8
function countRotationsDivBy8($n) {
$len = strlen($n);
$count = 0;
// For single digit number
if ($len == 1) {
$oneDigit = $n[0] - "0";
if ($oneDigit % 8 == 0) {
return 1;
}
return 0;
}
// For two-digit numbers
// (considering all pairs)
if ($len == 2) {
// First pair
$first = ($n[0] - "0") * 10 + ($n[1] - "0");
// Second pair
$second = ($n[1] - "0") * 10 + ($n[0] - "0");
if ($first % 8 == 0) {
$count++;
}
if ($second % 8 == 0) {
$count++;
}
return $count;
}
// Considering all three-digit sequences
$threeDigit;
for ($i = 0; $i < $len - 2; $i++) {
$threeDigit = ($n[$i] - "0") * 100 +
($n[$i + 1] - "0") * 10 + ($n[$i + 2] - "0");
if ($threeDigit % 8 == 0) {
$count++;
}
}
// Considering the number
// formed by the last digit
// and the first two digits
$threeDigit = ($n[$len - 1] - "0") * 100 +
($n[0] - "0") * 10 + ($n[1] - "0");
if ($threeDigit % 8 == 0) {
$count++;
}
// Considering the number
// formed by the last two
// digits and the first digit
$threeDigit = ($n[$len - 2] - "0") * 100 +
($n[$len - 1] - "0") * 10 + ($n[0] - "0");
if ($threeDigit % 8 == 0) {
$count++;
}
// required count
// of rotations
return $count;
}
// Driver Code
$n = "43262488612";
echo "Rotations: " . countRotationsDivBy8($n);
?>
Time Complexity : O(n), where n is the number of digits in input number.
Auxiliary Space: O(1)
Please refer complete article on Count rotations divisible by 8 for more details!
Explore
Basics
Array
OOPs & Interfaces
MySQL Database
PHP Advance