相当于 f%65=0存在一个最小的a,对任意的x都成立。。。。
若g(x)=(5*x^13+13*x^5)%65,则可知道循环周期为65 g(x)相当于 t=x%65 ,t*t%65*t%65.....*13+.....
而 a*k*x循环周期也为65 因此就用两次循环去求解。。
#include<stdio.h>
int ans[66];
int pow1(int x)
{
int f=0,i=13,t=1,m;
for(i=1;i<=13;i++)
{
t=x%65*t%65;
if(i==5)m=t;
}
return (t*5%65+m*13%65)%65;
}
void init()
{
int i;
for(i=1;i<=65;i++)ans[i]=pow1(i);
}
int main()
{
int x,k,a,f,flag,t;
init();
while(scanf("%d",&k)!=EOF)
{
for(a=1;a<=65;a++)
{
flag=1;
t=k%65*a%65;
for(x=1;x<=65;x++)
{
f=ans[x];
if((f+t*x%65)%65!=0)
{
flag=0;
break;
}
}
if(flag)break;
}
if(flag)printf("%d\n",a);
else
printf("no\n");
}
return 0;
}