正确执行与斐波那契数和质数有关的两个函数

时间:2018-10-20 18:55:19

标签: c function primes fibonacci

我有一个很长的问题,并且这个问题的某些部分涉及两个名为gp(a,t)fibo(a,t)的函数。

gp(a,t)获得两个整数a,并且必须返回大于或等于(t/100)*a的最小素数

fibo(a,t)获得两个整数a,t,并且必须返回斐波纳契数列的最大成员,该数小于或等于 (t/100)*a。 (我们认为0是斐波纳契数列的第一个成员,因此它是0 1 1 2 3 5 8 13 ...)

(问题没有提到我们必须将(t/100)*a保存为浮点数,但是根据其示例,必须将其视为浮点数,例如,如果它是3.5,则gp必须返回5并不是3。)

我实现了这个功能,但是在一些未知的测试案例中,它失败了,所以我想知道我的哪一部分功能是错误的。我的功能有没有为他们提供错误的答案?

注意:我将所有内容都定义为long 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。问题已经解决了。问题出在法官系统中,代码很好!

0 个答案:

没有答案