#include<iostream> using namespace std; bool flag[1000000000005]; int main() { flag[0]=flahg[1]=true; for(int i=2; i<=1000000000000; i++) { for(int j=2; j*j<=i; j++) { if(i%j==0) { flag[i]=true; } } } int n; cin>>n; if(flag[n]) { cout<<"NO"; } else { cout<<"YES"; } return 0; }
时间: 2024-04-12 19:28:49 浏览: 26
在你的代码中,出现了一些错误和潜在问题。我将逐个指出并提供修正建议:
1. 在声明 `bool flag[1000000000005];` 时,数组的大小超出了 C++ 的限制。C++ 中的数组大小应该是一个整数常量表达式,而 `1000000000005` 超过了 `unsigned long long int` 的最大限制。你可以考虑使用动态分配内存来解决这个问题。
2. 在 `flag[0]=flahg[1]=true;` 中,`flahg` 是一个拼写错误,应该是 `flag`。
3. 在 `for(int i=2; i<=1000000000000; i++)` 中,循环的终止条件超过了数组的大小。根据之前的修正,你需要调整循环的终止条件。
修正后的代码如下所示:
```cpp
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
bool* flag = new bool[n+1];
flag[0] = flag[1] = true;
for(int i = 2; i <= n; i++)
{
for(int j = 2; j*j <= i; j++)
{
if(i%j == 0)
{
flag[i] = true;
break;
}
}
}
if(flag[n])
{
cout << "NO";
}
else
{
cout << "YES";
}
delete[] flag;
return 0;
}
```
这个修正后的代码应该能够正确编译和运行。请注意,我修正的是代码中的语法错误和一些潜在问题,但无法判断你的算法逻辑是否正确。如果你有任何其他问题,请随时提问!