Pagini recente » Cod sursa (job #3127564) | Cod sursa (job #1899843) | Cod sursa (job #1448743) | Rating Anca Buzatu (AncaBuzatu18) | Cod sursa (job #1287591)
#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;
}