很容易就能想到做法,但是被卡空间完被卡时间qaq 首先埃氏筛一下,这时候v数组可以开bool,不开好像会被卡,然后prime数组也需要开小点,这里开1e6就够,空间上差不多就是这样 时间上,最开始是想着从2遍历到n/2,一个个判断是不是质数,结果T;之后想到直接从素数表遍历就可以了,之后AC AC代码:
#include
<bits
/stdc
++.h
>
using namespace std
;
const int maxn
=10000005;
bool v
[maxn
];
int prime
[maxn
/10];
int m
;
void find_primes(int n
)
{
for(int i
=0;i
<maxn
;i
++) v
[i
]=false;
m
=0;
for(int i
=2;i
<=n
;i
++){
if(v
[i
]) continue;
prime
[++m
]=i
;
for(int j
=i
;j
<=n
/i
;j
++) v
[i
*j
]=true;
}
}
int
main()
{
find_primes(maxn
-5);
int t
;cin
>>t
;
for(int j
=1;j
<=t
;j
++){
int n
;cin
>>n
;
int ans
=0;
for(int i
=1;i
<=m
&&prime
[i
]*2<=n
;i
++){
if(!v
[n
-prime
[i
]]) ++ans
;
}
cout
<<"Case "<<j
<<": "<<ans
<<endl
;
}
}
转载请注明原文地址:https://ipadbbs.8miu.com/read-1627.html