【题解】闹麻了数

闹麻了数

确实闹麻了。

思路

不想写废话了,使用类似埃氏筛(复杂度 \(O(n\log n)\) 那个),将每个数的倍数标记增加一(不包括本身)。

最后输出的时候判断是否只有两个因子(标记)即可。

正确性

原来的正确性说明有一点问题,现已更改。

统计倍数可以标记出每一个数有多少个不同的因数且不会重复计算。

正确性显然。

Code

#include<bits/stdc++.h>
using namespace std;
int sum[10000010],cnt;
int n;
void init()
{
	for(int i=2;i<=n;i++)
	{
		for(int j=i+i;j<=n;j+=i)
		{
			sum[j]++;
		}
	}
}
int main()
{
	freopen("noise.in","r",stdin);
	freopen("noise.out","w",stdout);
	cin>>n;
	init();
	int tot=0;
	for(int i=1;i<=n;i++)
	{
		tot+=(sum[i]==2);
	}
	cout<<tot<<'\n';
	return 0;
}

不来不想放代码的,感觉还是放要好一点。

posted @ 2025-08-16 10:45  lovelyzsc  阅读(10)  评论(0)    收藏  举报