POJ 3292 数论 类似素数筛

来源:互联网 发布:淘宝买刀剑会被扣留不 编辑:程序博客网 时间:2024/06/08 02:52

POJ 3292 数论 类似素数筛


题意:一个定义的类型数 :是A-number 是模 4 余 1的数

A-prime h是只能由 1* h((即只能是1*A-number得到h ) 不能由其他的A-number数相乘得到)得到的数  (和素数没关系)

A-semis-primes 数是由且只能由 两个 A-prime数相乘得到

求一个数中存在多少 A-semis-primes


类似素数筛的做法

#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<iostream>using namespace std;const int Max=1000010;int vis[1000010];int sum[1000010];int main(){    int n,t;    memset(vis,0,sizeof(vis));    for(int i=5;i<=1001;i+=4)    {        if(!vis[i])        for(int j=5;(t=j*i)<=Max;j+=4)        {            if(!vis[j])                    <span id="transmark"></span>                vis[t]=1;            else                       //存在多个A-prime两两相乘的情况                vis[t]=-1;        }    }    sum[0]=0;    for(int i=1;i<1000010;i++)        sum[i]=sum[i-1]+(vis[i]==1);    while(~scanf("%d",&n),n)        printf("%d %d\n",n,sum[n]);    return 0;}


0 0