#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N=4000; int tot; int pri[N],vis[N]; void prime(int n){ for (int i=2;i<=n;i++){ if (!vis[s])pri[tot++]=i; for (int j=0;j<tot;j++){ if(1ll*pri[j]*i>n) break; vis[1ll*pri[j]*i]=1; if(pri[j]%i==0) break; } } bool check(ll a){ llt=pow(a,0.5); if(t*t==a||(t+1)*(t+1)==a) return 1; t=pow(a,1.0/3); if(t*t*t==a||(t+1)*(t+1)*(t+1)==a||(t+2)*(t+2)*(t+2)==a) return 1; return 0; } int main() { prime(N); int t; cin>>t; while (t--){ ll n; cin>>n; if (check(n)){ cout<<"yes"<<endl; continue; } int b=0; while(n%pri[i]==0){ n/=pri[i]; b++; } if (b==1){ n=0; break; } if(n==1) cout<<"yes"<<endl; else cout<<"no"<<endl; } return 0; }
时间: 2024-04-10 21:28:21 浏览: 77
这段代码是一个判断给定数是否为完全平方数或完全立方数的程序。它首先使用埃拉托斯特尼筛法找出小于等于N的所有素数,并存储在数组pri中。然后,它根据给定的整数n,使用check函数检查n是否为完全平方数或完全立方数。如果是,则输出"yes",否则继续执行后续判断。程序会将n分解为质因数,并统计每个质因数的个数b。如果b等于1,说明n只有一个质因数,那么将n置为0,否则继续判断。最后,如果n等于1,则输出"yes",否则输出"no"。
需要注意的是,代码中存在一些错误:
1. 在prime函数中,vis数组的索引应该是s而不是i,应该修改为`if (!vis[i])pri[tot++]=i;`。
2. 在check函数中,t变量没有声明,需要修改为`ll t=pow(a,0.5);`。
3. 在while循环中,缺少了对i的初始化和更新操作,需要添加`int i=0;`和`i++`。
修复以上问题后的代码如下所示:
```cpp
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 4000;
int tot;
int pri[N], vis[N];
void prime(int n) {
for (int i = 2; i <= n; i++) {
if (!vis[i]) pri[tot++] = i;
for (int j = 0; j < tot; j++) {
if (1ll * pri[j] * i > n) break;
vis[1ll * pri[j] * i] = 1;
if (pri[j] % i == 0) break;
}
}
}
bool check(ll a) {
ll t = pow(a, 0.5);
if (t * t == a || (t + 1) * (t + 1) == a) return true;
t = pow(a, 1.0 / 3);
if (t * t * t == a || (t + 1) * (t + 1) * (t + 1) == a || (t + 2) * (t + 2) * (t + 2) == a) return true;
return false;
}
int main() {
prime(N);
int t;
cin >> t;
while (t--) {
ll n;
cin >> n;
if (check(n)) {
cout << "yes" << endl;
continue;
}
int b = 0;
for (int i = 0; i < tot; i++) {
while (n % pri[i] == 0) {
n /= pri[i];
b++;
}
}
if (b == 1) {
n = 0;
break;
}
if (n == 1)
cout << "yes" << endl;
else
cout << "no" << endl;
}
return 0;
}
```
请问还有什么问题我可以帮助您解答的吗?
阅读全文