首页 > 其他分享 >CF1423K Lonely Numbers

CF1423K Lonely Numbers

时间:2023-08-27 10:45:49浏览次数:47  
标签:孤独 CF1423K gcd 所以 质数 sqrt Lonely Numbers 互质

思路

因为对于 \(\gcd(a,b)\),\(\frac a{\gcd(a,b)}\),\(\frac b{\gcd(a,b)}\) 中 \(a\) 和 \(b\) 是等价的,可以交换的。所以我们先令 \(a>b\)。

令 \(\gcd(a,b)=d\),因为 \(\frac a{\gcd(a,b)}\) 有除法,所以我们应该想办法去除除法,就同乘以一个 \(d\),即 \(d^2\),\(a\),\(b\) 三条边。

构成三角形的三条边需要满足两条较小边之和大于最大边。

讨论一下情况:

  • \(d^2\) 最大,则需要满足 \(a+b>d^2\)。

  • \(d^2\) 不是最大,则 \(a\) 最大,需要满足 \(d^2+b>a\)。

如果 \(a,b\) 互质,则 \(d=1\),因为 \(a>b\),所以一定不满足,这种情况一定不能构成三角形。

那么 \(a,b\) 一定不能互质,若 \(d<\sqrt a\),则需要满足 \(d^2+b>a\),令 \(a=d\times k\),只需要令 \(b=d\times (k-1)\),那么就可以满足条件了,若 \(d>\sqrt a\),则需要满足 \(a+b>d^2\),同样是上面一种的构造方法,所以如果 \(a\) 是合数,很容易就能构造满足条件的 \(b\)。所以合数一定不是孤独数字。

再考虑 \(a\) 是质数的情况,这种情况下,\(a\) 没法找到不互质的 \(b\),那么是质数就一定是孤独数字吗?不见得,因为 \(b\) 可以是质数,那么 \(a\) 至少取多少呢?

取 \(b\) 的 \(k\) 倍吗?三条边就是 \(b\),\(k\times b\),\(b^2\),若 \(k<b\),则需要满足 \(b+k\times b>b^2\) 显然不满足,\(k\) 至少要选 \(b\) 也就是 \(a\) 至少为 \(b^2\)。

所以对于质数 \(p\),如果 \(p^2\) 在范围 \([1,n]\) 内,它就不是孤独数字。

所以固定了范围为 \(n\) 后,孤独数字就只有 \(\lfloor \sqrt n\rfloor \sim n\) 的质数了。

所以,可以先线性筛预处理,然后前缀和统计质数个数,最终答案是 \(1\sim n\) 的质数个数减去 \(1\sim \lfloor \sqrt n\rfloor\) 的质数个数,记得加上 \(1\) 的情况,\(1\) 与任意数互质,所以它一定是孤独数字。

AC code

#include<bits/stdc++.h>
using namespace std;
int shu[1000005],pri[1000005],cnt;
int T,n;
inline void init()//线性筛预处理
{
	for(int i=2;i<=1000000;++i)
	{
		if(!shu[i]) pri[++cnt]=i;
		for(int j=1;j<=cnt&&pri[j]*i<=1000000;++j)
		{
			shu[pri[j]*i]=1;
			if(i%pri[j]==0) break;
		}
	}
	for(int i=2;i<=1000000;++i) shu[i]^=1,shu[i]+=shu[i-1];//前缀和统计1~i的质数个数
}
int main()
{
	init();
	scanf("%d",&T);
	while(T--) scanf("%d",&n),printf("%d\n",shu[n]-shu[(int)sqrt(n)]+1);//注意:无论如何1都会孤独数字,所以记得+1
}

标签:孤独,CF1423K,gcd,所以,质数,sqrt,Lonely,Numbers,互质
From: https://www.cnblogs.com/One-JuRuo/p/17659962.html

相关文章

  • P7 UVA11481 Arrange the Numbers
    UVA11481ArrangetheNumbers组合数问题。做法貌似很多,显然在前\(m\)个数中选\(k\)个,即\(C(m,k)\),然后后面有\(m-k\)个数需要保证不放在自己的位置上,所以后面整体是一个禁位问题,貌似可以用棋盘多项式去推禁位公式,但是暂时不会。不过还有另外一种思路,就是对于后面的\(n-......
  • Compatible Numbers
    CompatibleNumbers思路对于一个数\(x\),如果想要构造一个数\(y\)使得\(x\&y=0\)那么显然对于\(x\)的每一位:如果当前位是0,那么\(y\)这一位可以填\(1,0\)如果当前位是1,那么\(y\)这一位可以填\(0\)那么对于用这种方式构造出来的数的一些位是可以互换的,而互......
  • CF449D Jzzhu and Numbers
    有一个很蠢但是很好写的做法。就是你先令\(t_i\)为与起来恰好为\(i\)的方案数,然后\(g_i\)为与起来子集中有\(i\)的方案数。然后\(g_S=\sum\limits_{T\subseteqS}t_T\),反演一下变成\(t_{S}=\sum\limits_{T\subseteqS}(-1)^{|S|-|T|}g_{T}\)。注意到可以\(O(w)\)枚......
  • CF1808C Unlucky Numbers 题解
    可以证明答案是\(l\)或\(r\)的一段前缀,拼上后面全部相同的一段字符\(d\),证明方式类似数位dp。能够自由填的数字一定是相等的,这样不会影响幸运值。前面那些不能自由填写的,就是\(l\)或\(r\)的一段前缀。假如不是\(l\)或\(r\)的一段前缀,必然填写相等的更好,而这种情况已......
  • 题解 CF1842H【Tenzing and Random Real Numbers】
    看了题解。好难受,想用积分求概率,算了半天。发现没啥规律,不是不能算,就是太可怕了。Problem有\(n\)个\([0,1]\)范围内的均匀随机变量\(x_{1\cdotsn}\)和\(m\)条限制,每条限制形如\(x_i+x_j\le1\)或\(x_i+x_j\ge1\)。请你求出所有限制均满足的概率。对\(998244353\)......
  • PROPERTIES OF SQUARE NUMBERS
     Whenanumberismultipliedbyitself,theresultingnumberiscalledasasquarenumber. Forexample,whenwemultiply5by5,weget52 =25.Here,25isasquarenumber.Ingeometry,theareaofasquareisthefinestexampleofasquarenumber.Are......
  • PAT (Advanced Level)_1100 Mars Numbers (20分)(C++_模拟)
    PeopleonMarscounttheirnumberswithbase13:ZeroonEarthiscalled"tret"onMars.Thenumbers1to12onEarthiscalled"jan,feb,mar,apr,may,jun,jly,aug,sep,oct,nov,dec"onMars,respectively.Forthenexthigherdigi......
  • Educational Codeforces Round 150 (Rated for Div. 2) C. Ranom Numbers
    #include<iostream>#include<string>#include<cstring>#include<algorithm>#include<cmath>usingnamespacestd;constintN=2e5+10;typedeflonglongll;//记录每个字母的最前面的位置和最后面的位置intFast[5],End[5];strings,c;llres=-0x3......
  • CodeForces 1841C Ranom Numbers
    洛谷传送门CF传送门先反转\(s\)串,然后考虑dp,设\(f_{i,j,0/1}\)为考虑了\([1,i]\),前缀最大值为\(j\),是否修改过字符的最大得分。转移讨论是否在这个位置修改即可。时间复杂度\(O(n)\)。code//Problem:C.RanomNumbers//Contest:Codeforces-Educational......
  • Codeforces Round #232 (Div. 2)-B. On Corruption and Numbers
    原题链接B.OnCorruptionandNumberstimelimitpertestmemorylimitpertestinputoutputAlexey,amerryBerlandentrant,gotsickofthegrayrealityandhezealouslywa......