本文共 730 字,大约阅读时间需要 2 分钟。
hdu :
nyoj :
题解:容斥原理
#include#include #include #include #include using namespace std;typedef long long LL;#define eps 1e-8LL prime[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61};LL a[] = {6,10,14,15,21,22,26,33,34,35,38,39,46,51,55,57,58,62};LL n;LL find(LL x){ //找1~n中开根号x次方的数有多少个,每次把1去掉,最后的结果再加1 return (LL)(pow(n*1.0,1.0 / x) + eps) - 1;}void solve(){//根据容斥原理奇加偶减 LL sum = 0; for(int i = 0;i < 18;i++) sum += find(prime[i]); sum += find(30);// 2 * 3 * 5 sum += find(42);// 2 * 3 * 7 for(int i = 0;i < 18;i++) sum -= find(a[i]); printf("%lld\n",sum+1);}int main(){ while(~scanf("%lld",&n)){ solve(); } return 0;}
转载地址:http://hcsgi.baihongyu.com/