/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
static int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
public static void main
(String[] args
) {
int[] arr = {5, 12, 8, 21, 3, 17, 9, 14, 6, 25};
int n = arr.length;
List<Integer> chainSizes = new ArrayList<>();
boolean[] visited = new boolean[n];
for (int start = 0; start < n; start++) {
if (visited[start]) continue;
int size = 1;
visited[start] = true;
int current = start;
while (true) {
int next = (current + 1) % n;
if (visited[next]) break;
if (gcd(arr[current], arr[next]) > 1) {
size++;
visited[next] = true;
current = next;
} else {
break;
}
}
if (size > 1) {
chainSizes.add(size);
}
}
int[] chains = new int[n];
for(int i : chainSizes){
chains[i]++;
}
int[] preSum = new int[chains.length + 3];
preSum[0] = chains[0];
for(int i = 1 ; i < chains.length; i++){
preSum[i] = preSum[i-1] + chains[i];
}
int sum = 0;
for(int i = 1; i < chains.length; i++){
int ansi = 0;
int g = 1;
for(int l = i; l + i - 1 < chains.length; l+=i){
int range = preSum[l + i - 1] - (l > 0 ? preSum[l - 1] : 0);
ansi += g * range;
g++;
}
sum += ansi;
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKIHN0YXRpYyBpbnQgZ2NkKGludCBhLCBpbnQgYikgewogICAgICAgIHdoaWxlIChiICE9IDApIHsKICAgICAgICAgICAgaW50IHRlbXAgPSBiOwogICAgICAgICAgICBiID0gYSAlIGI7CiAgICAgICAgICAgIGEgPSB0ZW1wOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CgogICAgICAgIGludFtdIGFyciA9IHs1LCAxMiwgOCwgMjEsIDMsIDE3LCA5LCAxNCwgNiwgMjV9OwogICAgICAgIGludCBuID0gYXJyLmxlbmd0aDsKCiAgICAgICAgTGlzdDxJbnRlZ2VyPiBjaGFpblNpemVzID0gbmV3IEFycmF5TGlzdDw+KCk7CgogICAgICAgIGJvb2xlYW5bXSB2aXNpdGVkID0gbmV3IGJvb2xlYW5bbl07CgogICAgICAgIGZvciAoaW50IHN0YXJ0ID0gMDsgc3RhcnQgPCBuOyBzdGFydCsrKSB7CgogICAgICAgICAgICBpZiAodmlzaXRlZFtzdGFydF0pIGNvbnRpbnVlOwoKICAgICAgICAgICAgaW50IHNpemUgPSAxOwogICAgICAgICAgICB2aXNpdGVkW3N0YXJ0XSA9IHRydWU7CgogICAgICAgICAgICBpbnQgY3VycmVudCA9IHN0YXJ0OwoKICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgIGludCBuZXh0ID0gKGN1cnJlbnQgKyAxKSAlIG47CgogICAgICAgICAgICAgICAgaWYgKHZpc2l0ZWRbbmV4dF0pIGJyZWFrOwoKICAgICAgICAgICAgICAgIGlmIChnY2QoYXJyW2N1cnJlbnRdLCBhcnJbbmV4dF0pID4gMSkgewogICAgICAgICAgICAgICAgICAgIHNpemUrKzsKICAgICAgICAgICAgICAgICAgICB2aXNpdGVkW25leHRdID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gbmV4dDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChzaXplID4gMSkgewogICAgICAgICAgICAgICAgY2hhaW5TaXplcy5hZGQoc2l6ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICBpbnRbXSBjaGFpbnMgPSBuZXcgaW50W25dOwogICAgICAgCiAgICAgICBmb3IoaW50IGkgOiBjaGFpblNpemVzKXsKICAgICAgIAljaGFpbnNbaV0rKzsKICAgICAgIH0KICAgICAgIAogICAgICAgaW50W10gcHJlU3VtID0gbmV3IGludFtjaGFpbnMubGVuZ3RoICsgM107CiAgICAgICBwcmVTdW1bMF0gPSBjaGFpbnNbMF07CiAgICAgICAKICAgICAgIGZvcihpbnQgaSA9IDEgOyBpIDwgY2hhaW5zLmxlbmd0aDsgaSsrKXsKICAgICAgIAlwcmVTdW1baV0gPSBwcmVTdW1baS0xXSArIGNoYWluc1tpXTsKICAgICAgIH0KICAgICAgIAogICAgICAgaW50IHN1bSA9IDA7CiAgICAgICAKICAgICAgIGZvcihpbnQgaSA9IDE7IGkgPCBjaGFpbnMubGVuZ3RoOyBpKyspewogICAgICAgCWludCBhbnNpID0gMDsKICAgICAgIAlpbnQgZyA9IDE7CiAgICAgICAJZm9yKGludCBsID0gaTsgbCArIGkgLSAxIDwgY2hhaW5zLmxlbmd0aDsgbCs9aSl7CiAgICAgICAJaW50IHJhbmdlID0gcHJlU3VtW2wgKyBpIC0gMV0gLSAobCA+IDAgPyBwcmVTdW1bbCAtIDFdIDogMCk7CiAgICAgICAgYW5zaSArPSBnICogcmFuZ2U7CiAgICAgICAgZysrOwogICAgICAgCX0KICAgICAgIAlzdW0gKz0gYW5zaTsKICAgICAgIH0KICAgICAgIAogICAgICAgU3lzdGVtLm91dC5wcmludChzdW0pOwoJfQp9