bzoj2440 [中山市选2011]完全平方数

题目链接

首先二分答案,将问题转化为求$n$以内的 含有平方因子数 的个数

由于合数的平方一定是某个质数的平方的倍数,因此我们只考虑质数

由于是平方,所以只考虑$\sqrt{n}$内的质数的平方

含有平方因子数 的个数就用容斥原理计算,直接dfs会T,所以可以预处理出$10^6$以内的$\mu(i)$

即可在$O(\sqrt{n}\ log_2{n})$回答每一个询问

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<string>
 5 #include<cstring>
 6 #include<cmath>
 7 #define re(i,l,r) for(int i=(l);i<=(r);i++)
 8 #define rre(i,r,l) for(int i=(r);i>=(l);i--)
 9 using namespace std;
10 typedef long long LL;
11 int prime[100010],mu[100010],prime_tot;
12 bool bo[100010];
13 int T;
14 LL js(LL mid)
15 {
16     int ret=0;
17     LL nn=sqrt(mid+1);
18     re(i,1,nn)ret+=mu[i]*(mid/(1LL*i*i));
19     return ret;
20 }
21 LL check(LL mid)
22 {
23     return mid-js(mid);
24 }
25 int main()
26 {
27     re(i,2,100000)
28     {
29         if(!bo[i])prime[++prime_tot]=i,mu[i]=1;
30         for(int j=1;j<=prime_tot&&i*prime[j]<=100000;j++)
31         {
32             bo[i*prime[j]]=1;
33             if(i%prime[j]==0){mu[i*prime[j]]=0;break;}
34             else mu[i*prime[j]]=-mu[i];
35         }
36     }
37     scanf("%d",&T);
38     while(T--)
39     {
40         int n;scanf("%d",&n);
41         LL l=n,r=l<<1,mid,ans;
42         while(l<=r)
43         {
44             mid=(l+r)>>1;
45             LL temp=check(mid);
46             if(temp>=n)ans=mid,r=mid-1;
47             else l=mid+1;
48         }
49         printf("%lld\n",ans);
50 //        printf("%lld\n",js(n));
51     }
52     return 0;
53 }

 

转载于:https://www.cnblogs.com/HugeGun/p/5337939.html

引用:中山市是一个不设区的地级市,它包含了6个街道和18个镇。其中,有石岐街道、东区街道、西区街道、南区街道、五桂山街道、火炬开发区街道等。 引用:根据描述,这个游戏是一个给定了起始位置和目标位置的移动游戏。在一个n * m的棋盘上,棋盘上有两种不同的格子,分别用#和@表示。小明每次可以向上、下、左、右四个方向移动一格,如果移动到相同类型的格子上,费用为0,否则费用为1。问题要求计算从起始位置移动到目标位置所需的最小花费。输入包含多组数据,每组数据的格式为:第一行是两个整数n和m,表示棋盘的行数和列数;接下来的n行每行包含m个格子;最后一行是四个整数x1、y1、x2、y2,表示起始位置和目标位置的坐标。当输入的n和m都为0时,表示输入结束。输出每组数据的最小花费,每组数据独占一行。 引用:根据样例输入和输出,可以看出其中一个示例的输入是2行2列的棋盘,棋盘上有两种格子@@和@#;起始位置是(0, 1),目标位置是(1, 0)。根据游戏规则,需要计算从起始位置到目标位置的最小花费。输出为2。 根据以上信息,中山市和游戏之间没有直接关联。请问你是想了解中山市举情况吗?如果是的话,请提供更多的相关信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [不设区的地级市之中山市geoJSon可直接使用](https://download.youkuaiyun.com/download/weixin_36323996/12833075)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【中山市2009】【BZOJ2464】小明的游戏](https://blog.youkuaiyun.com/CreationAugust/article/details/48679593)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值