#include <bits/stdc++.h>
using namespace std;
#define int __int128
//用longlong会超出23333333333333的范围
//所以要用__int128
#define LL long long
int prime[5000000];
bool st[5000000];
int cnt;
int len = 4830458;//开根 23333333333333
int ans;
signed main(){
//printf("%lf",sqrt(23333333333333));//4830458.915396
cnt = 0;
ans = 0;
//memset(st,true,sizeof(st));
for(int i = 2;i <= len;i++){
if(!st[i]){
prime[cnt++] = i;
}
for(int j = i + i;j <= len;j += i){
st[j] = true;
}
}
/*for (int i = 2; i <= len; i++) {
if (!st[i]) prime[cnt++] = i;
for (int j = 0; i * prime[j] <= len; j++) {
st[i * prime[j]] = true;
if (i % prime[j] == 0) break;
}
}*/
cout << (LL)cnt << endl;
//方法1
set<LL> ss;
for(int i = 0;i < cnt;i++){
for(int j = i+1;j < cnt;j++){
int x = prime[i]*prime[i]*prime[j]*prime[j];
if(x<2333) continue;
if(x>23333333333333) break;//23333333333333
ss.insert(x);
//cout << ans << endl;
//cout << ss.size() << endl;
}
}
cout << ss.size() << endl;
//方法2 ,网上其他人的
/*int res = 0;
for (int i = 0; i < cnt; i++)
for (int j = i + 1; j < cnt; j++) {
int num = prime[i] * prime[i] * prime[j] * prime[j];
if (num < 2333) continue;
if (num > 23333333333333) break;
res++;
//cout << (long long)res << endl;
//输出耗时间
}
cout << (long long)res;*/
return 0;
}
蓝桥杯双子数
最新推荐文章于 2024-09-02 21:40:19 发布