分析:长度为n的本源串=2^n-长度为n的非本源串,对于长度为n的非本源串一定是由长度为m的串循环k次得到的,所以m一定是n的约数,所以只需要求到所有n的约数长度构成的本源串个数即可(不能求构成串之和,因为可能重复相加了,比如x是m的约数,则x一定是n的约数,则m的串包含x,只能m得本源串+x的本源串)所以n的本源串个数sum[n]=2^n-(sum[x1]+sum[x2]+....sum[m]+...)-2;//x1,x2...m...是n的不为1的约数
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
const int MOD=2008;
int fastpower(int n, int k)
{
int s = 1;
while ( k )
{
if ( k & 1 )
{
s = s*n%MOD;
}
n = n*n%MOD;
k >>= 1;
}
return s;
}
int pstring(int n)
{
if ( n == 1 )
{
return 2;
}
int sum = 0;
for (int i = 2; i*i <= n; i++)
{
if ( n%i == 0 )
{
sum = (sum+pstring(i))%MOD;
if ( n/i != i )
{
sum = (sum+pstring(n/i))%MOD;
}
}
}
return (fastpower(2, n)-sum-2+MOD)%MOD;
}
int main()
{
int n;
while ( scanf("%d", &n)!=EOF )
{
printf("%d\n", pstring(n));
}
return 0;
}