我有一个很长的问题,并且这个问题的某些部分涉及两个名为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。问题已经解决了。问题出在法官系统中,代码很好!