【题解】闹麻了数
闹麻了数
确实闹麻了。
思路
不想写废话了,使用类似埃氏筛(复杂度 \(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;
}
不来不想放代码的,感觉还是放要好一点。

浙公网安备 33010602011771号