2015-06-06 2 views
0

Мне известны другие вопросы к этому сообщению об ошибке, но ни одно из них не разрешает сообщение об ошибке в моем случае код здесь находит значение первого число треугольников должно иметь более 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); 
} 
+3

У вас есть redeclared 'tri' только внутри цикла while:' unsigned long max = 1, counter, tri, n, tricpy; ' –

+0

oh Я этого не заметил Я продолжал искать массив переполнения и все такое! спасибо –

+0

Отпечатай ваш код более щедро, 4 места считаются более читаемыми. Оберните длинные строки с 79 символами, определение 'long tri [] = {...};' - настоящая боль. – chqrlie

ответ

0

Определение три- в

unsigned long max=1,counter,tri,n,tricpy; 

будет один используемый в

if(n>=500) printf("%li\n",tri[n-500]); 

и поэтому inde ed tri не является массивом или указателем.

Смежные вопросы

 Смежные вопросы