埃氏筛
默认2 3 5 是是质数,“筛去”其所有在范围内的倍数
一般的,将未被标记的数(vis[i]==0)的倍数全部筛掉,剩下的都是质数
bool vis[N]
void init(int n)
{
//2 3 5 正好是质数
vis[1]=vis[0]=1;
for(int i=2;i<=n;i++)
{
if(!vis[i])
{
for(int j=2*i;j<=n;j+=i)
{
vis[j]=true;
}
}
}
}
朴素计算素数的方法;范围: (i<=x\i)防止溢出
1 2 3 4 6
36 18 12 9 6
注意当x==1直接返回false。质数只有1和本身为倍数
数位和的计算
#include <bits/stdc++.h>
using namespace std;
int cnt=0;
//朴素的质数筛选法
int count(int n)
{
int sum=0;
while(n)
{
sum+=(n%10);
n/=10;
}
return sum;
}
bool Isprime(int x)
{
if(x==1)return false;
for(int i=2;i<=x/i;i++)
{
if(x%i==0)return false;
}
return true;
}
int main()
{
int n;cin>>n;
for(int i=1;i<=n;i++)
{
if(Isprime(count(i))) cnt++;
}
cout<<cnt;
return 0;
}

345

被折叠的 条评论
为什么被折叠?



