明明是对的啊~~~
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const int maxn=1e6+10;
int m;
char s2[maxn];
ull power[maxn];
ull h[maxn];
ull b=131,mod=1<<31;//b与mod互质 131
bool check(ull s,int k)
{
for(ull j=0;j<m;j+=k){//①j<m;②j+=i ③<ull!!!>
if(s!=h[j+k]-h[j]*power[k])return 0;
}
return 1;
}
int main()
{
power[0]=1;
for(int i=1;i<=101000;i++)power[i]=power[i-1]*b;
while(scanf("%s",s2+1))//字符串可不用&
{
if(s2[1]=='.')break;
m=strlen(s2+1);
h[0]=0;
for(int i=1;i<=m;i++){h[i]=(h[i-1]*b+(ull)(s2[i]-'A'+1))%mod;}
for(int i=1;i<=m;i++)
{
if(m%i==0)
{
if(check(h[i],i)==1)
{
printf("%d\n",m/i);
break;
}
}
}
}
return 0;
}