• 板块学术版
  • 楼主WA_csp_noip
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/12/31 23:31
  • 上次更新2024/12/31 23:32:44
查看原帖
1559398
WA_csp_noip楼主2024/12/31 23:31

abc 386 的D题

为什么第一份代码能过但第二份不行?

第一份:

#include <stdio.h>
#include <vector>
using namespace std;

long long n;
bool b[2000001];

int main() {
    scanf("%lld", &n);
    vector<int> v;
    for (int i = 2; i <= 2e6; i++) {
        if (b[i])
            continue;
        v.push_back(i);
        for (int j = i; 1LL * i * j <= 2e6; j++)
            b[i * j] = 1;
    }
    int x = v.size(), ans = 0;
    for (int i = 0; i < x; i++)
        for (int j = i + 1; (__int128)(v[i] * v[j] * v[i] * v[j]) <= n && j < x; j++)
            ++ans;
    for (auto it : v) {
        if ((__int128)(it * it * it * it * it * it * it * it) > n)
            break;
        ++ans;
    }
    printf("%d", ans);
}

第二份代码:

#include <stdio.h>
#include <vector>
#define ll long long
using namespace std;

ll n;
bool b[2000001];

int main() {
    scanf("%lld", &n);
    vector<int> v;
    for (int i = 2; i <= 2e6; i++) {
        if (b[i])
            continue;
        v.push_back(i);
        for (int j = i; 1LL * i * j <= 2e6; j++)
            b[i * j] = true;
    }
    int x = v.size(), ans = 0;
    for (int i = 0; i < x; i++)
        for (int j = i + 1; (__int128)v[i] * v[j] * v[i] * v[j] <= n && j < x; j++)
            ans++;
    for (auto i : v) {
        if ((__int128)i * i * i * i * i * i * i * i > n)
            break;
        ans++;
    }
    printf("%d", ans);
}
2024/12/31 23:31
加载中...