Cod sursa(job #1287591)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 7 decembrie 2014 21:21:19
Problema Prefix Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<bits/stdc++.h>
using namespace std;

ifstream fin("perioada2.in");
ofstream fout("perioada2.out");

const int NMAX=10000005;

int n,pi[NMAX];
char s[NMAX];
long long sol;

inline int Div(int x)
{
    int i,aux,cnt=1;
    aux=sqrt(x);
    for (i=2;i<aux;i++)
        if (x%i==0) cnt+=2;
    if (aux!=1 && x%aux==0) cnt++;
    return cnt;
}

int main()
{
    int i,dr;
    fin>>n;
    fin>>(s+1);
    if (n==1) {fout<<"0";return 0;}
    pi[1]=0;
    for (i=2;i<=n;i++)
        {
            dr=pi[i-1];
            while (dr && s[dr+1]!=s[i]) dr=pi[dr];
            if (s[dr+1]==s[i]) pi[i]=dr+1;
        }
    if (pi[n]>=n/2 && n%(n-pi[n])==0) sol+=Div(n/(n-pi[n]));
    fout<<sol<<"\n";
    return 0;
}