好的,第一件事。是的,这个问题来自编程竞赛。不,我不是想作弊,因为比赛已经结束 4 小时前。我很确定我的代码是正确的,但比赛的编译器说它给出了错误的答案。我尝试了另一个编译器,它说“超出时间限制”。
那么,首先,你能告诉我代码是否正确吗?[一位编译器说不是]
如果是,那么我怎样才能提高时间效率?[另一个编译器说它超出了时间限制]
问题 一个数如果大于 1 并且除了 1 和它自己之外没有除数,则称为素数。前几个素数是 2, 3, 5, 7, 11, 13,.. 等等。给定一个整数 X,找出不小于 X 的最小素数
输入:第一行包含测试用例 T 的数量。接下来是 T 用例。每个测试用例由一个单独的行中的整数 X 组成。
输出:输出 T 行,每种情况一个包含不小于 X 的最小素数
约束:1 <= T <= 10 1 <= X <= 1,000,000
样本输入:4 8 47 90 1130
样本输出:11 47 97 1151
这是我的解决方案:
int main()
{
int n;
long int x, i, a;
bool isPrime; // This flag will test if number is prime or not?
cin>>n; // Here "n" will represent the number of test cases
while(n)
{
cin>>x; // "x" is the number to be tested for the nth case
if(x<=2)
{
cout<<2<<endl; // All numbers smaller than 3 will have the smallest prime number as 2.
continue;
}
for(i=x;i<=1000000;i++) // Should I have checked values of "i" for odd numbers only? I forgot to try that... Would it have helped in reducing time complexity?
{
isPrime=true;
for(a=2; a<i; a++) // Okay I tried making it (i/2)+1 but then the compiler said that it was a wrong answer. I am skeptical though...
{
if(i%a==0 and i!=2)
isPrime=false;
}
if(isPrime==true)
{
cout<<i<<endl;
break;
}
}
n--;
}
return 0;
}