求解:oj题目 运行一直说运行错误,数据太大了后,该怎么解决

有一个数列{an} , a0=1, ai+1=(A*ai+ai mod B) mod C,请你编程求出这个数列第一次出现重复的项的标号,如果答案超出2000000输出"-1"(不加引号)

#include<stdio.h>
int main()
{
    int A,B,C,a[30];
    int k=0,ans,panduan=1,j;
    long long i;
    scanf("%d%d%d",&A,&B,&C);
    a[0]=1;
    for(i=0;i<30;i++)
    {
        j=i+1;
        a[i+1]=(A*a[i]+(a[i]%B))%C;
        
            for(k=0;k<j;k++)
            {
                if(a[j]==a[k])
                {
                    ans=j;
                    panduan=0;
                    break;
                }
                
            }
        if(panduan==0)
        break;
    }
    if(ans>2000000)
    printf("-1");
    printf("%d",ans);
    return 0;    
}

 

 

你这个i<=30,怎么会报错呢?到不了2000000呀

不清楚你的为什么会出问题,我这边运行任何数据都没有问题,你要不发下你测试得数据?

数组30的话 oj提示运行错误,改成2000000的话,我自己的程序都运行不了,改成2000000该如何修改程序呀