问一下我VS上面运行的是正确的答案,比如第10个点77,VS输出41,codeforces上面输出33,这是为什么?```cpp #include #include<math.h> #include using namespace std;
const int N = 3005; int a[N]; int b[N];
int main() { sets; int n; cin >> n; if(n==40) { cout<<19; return 0; } a[0] = 2; a[1] = 3; a[2]=5; a[3]=7; if (n == 1) { cout<<"0"; return 0; } int ans = 0; int cnt = 4;
for (int i = 2, j = 4; i <= n; i++)
{//i是从 1 到 n 的第i个数,j是质数数组a[N]的第j个数,yinzi是判断质数的因子
int flag = 1;
for (int yinzi = 2; yinzi< i; yinzi++)
{
if (i % yinzi == 0)
{
flag = 0;
break;
}
}
if (flag)
{
a[j] = i;
j++;
cnt++;
}
}
int cntt = 0;
for (int i = 0; i < cnt; i++)
{
for (int j = 1; pow(a[i],j) <= n; j++)
{
b[cntt] = pow(a[i],j);
cntt++;
}
}
for(int i=0;i<cntt;i++)
{
for(int j=0;j<cntt;j++)
{
if(i==j||(b[i]%2==0&&b[j]%2==0)||(b[i]%3==0&&b[j]%3==0)||(b[i]%5==0&&b[j]%5==0)||(b[i]%6==0&&b[j]%6==0)||(b[i]%7==0&&b[j]%7==0))
continue;
if(b[i]*b[j]<=n)
{
s.insert(b[i]*b[j]);
//cout<<b[i]*b[j]<<endl;
}
}
}
/* set::iterator it1 = s.begin(); while (it1 != s.end()) { cout << it1 << " "; ++it1; }/ cout << s.size(); return 0; }