Мне известны другие вопросы к этому сообщению об ошибке, но ни одно из них не разрешает сообщение об ошибке в моем случае код здесь находит значение первого число треугольников должно иметь более N делителей, где вводится N (эта проблема обычно встречается в проекте Euler). Я использую sieve of Eratosthenes для генерации списка простых чисел и который используется Divisor function , и я кэшировал значения треугольных чисел для N = 500-> 1000 , чтобы сэкономить время. и при компиляции на GCC я нашел сообщение об ошибкеlong int array вызывает ошибку: индексированное значение не является ни массивом, ни указателем, ни вектором
error: subscripted value is neither array nor pointer nor vector
if(n>=500) printf("%li\n",tri[n-500]);
^
здесь полный код
#include <stdio.h>
#include <stdlib.h>
#define MAX 1000000
#define NofPrime 78498
int main(){
long tri[] = {76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,76576500,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,103672800,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,236215980,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320,842161320};
unsigned char *table = malloc(sizeof(char)*MAX);
int i,j,c=0;
unsigned int *prime = malloc(sizeof(unsigned int)*NofPrime);
for(i=0;i<MAX;i++)table[i] = 0;
for(i=2;i<MAX;i++){
if(table[i]==0){
prime[c] = i;
c++;
for(j=2;i*j<MAX;j++) table[i*j] = 1;
}}
free(table);
int t;
scanf("%i",&t);
while(t>0){
unsigned long max=1,counter,tri,n,tricpy;
scanf("%li",&n);
if(n>=500) printf("%li\n",tri[n-500]);
else while(max++){
tri = (1+max)*max/2;
tricpy = tri;
counter=1;
int i,j;
for(i=0;prime[i] <= tricpy;i++){
j =1;
while(tricpy%prime[i]==0){
j++;
tricpy/=prime[i];
}
counter*=j;
}
if(counter>n){
printf("%lu,",tri);
break;
}
}
t--;
}
free(prime);
}
У вас есть redeclared 'tri' только внутри цикла while:' unsigned long max = 1, counter, tri, n, tricpy; ' –
oh Я этого не заметил Я продолжал искать массив переполнения и все такое! спасибо –
Отпечатай ваш код более щедро, 4 места считаются более читаемыми. Оберните длинные строки с 79 символами, определение 'long tri [] = {...};' - настоящая боль. – chqrlie