Правильная реализация двух функций, связанных с Фибоначчи и простыми числами - PullRequest
0 голосов
/ 20 октября 2018

У меня очень длинный вопрос и некоторая часть вопроса, включает две функции с именами gp(a,t) и fibo(a,t).

gp(a,t) получает два целых числа a, t и должна вернуть наименьшее простое число, которое больше или равно (t/100)*a

fibo(a,t), получает два целых числа a, t и должно возвращать самый большой член ряда Фибоначчи, который меньше илиравно (t/100)*a.(Мы рассматриваем 0 как первый член ряда Фибоначчи в этой задаче, поэтому он равен 0 1 1 2 3 5 8 13 ...)

(В проблеме не упоминалось, что мы должны сохранить это (t/100)*a как float, но в соответствии с его примерами он должен рассматриваться как float, например, если он равен 3,5, тогда gp должен возвращать 5, а не 3.)

Я реализовал эту функцию, но в некоторых неизвестных тестовых примерах,это терпит неудачу, и поэтому я хочу знать, какая часть моих функций неправильна.Есть ли вероятность того, что мои функции дают неправильный ответ для них?

Примечание: я определил все как long, потому что основная очень длинная часть вопроса говорит, что используется long long, потому что числа станут большими.

Примечание 2. Это не дает ошибки ограничения времени, поэтому нет таких проблем, как бесконечный цикл или неоптимизированный расчет простых чисел.

Мои функции: (записано в c)

long long int primeCheck(long long int a)
{
    if (a==1 || a ==0)
    {
        return 0;
    }
    long long int isPrime = 1;
    ;
    for (long long int i =2;i*i<=a;i++)
    {
        if (a%i==0)
        {
            isPrime=0;
            break;
        }
    }
    return isPrime;

}
long long int fibo (long long int a, long long int t)
{
    float check =  (t*1.00/100)*1.00*a;
    if (check ==0)
    {
        return 0;
    }
    else if (check==1)
    {
     return 1;
    }
    long long int f_n_2 = 0;
    long long int f_n_1 = 1;
    long long int f_n=0;

    while (f_n<=check)
    {
        f_n = f_n_2 + f_n_1;
        f_n_2 = f_n_1;
        f_n_1 = f_n;
        if (f_n > check)
        {
            return f_n_2;
        }
        else if (f_n == check)
        {
            return f_n;
        }

    }
    return 0;
}
long long int gp (long long int a , long long int t)
{

    float check =  (t*1.00/100)*1.00*a;
    long long int i=ceil(check);
    while(1)
    {
        if (primeCheck(i) )
        {
            return i;
        }
        i++;
    }
    return 0;
}

PS1.Проблема решена.Проблема была в системе судейства, и код просто отлично!

...