大致题意:
一个H-number是所有的模四余一的数。
如果一个H-number是H-primes 当且仅当它的因数只有1和它本身(除1外)。
一个H-number是H-semi-prime当且仅当它只由两个H-primes的乘积表示。
H-number剩下其他的数均为H-composite。
给你一个数h,问1到h有多少个H-semi-prime数。
思路:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
using namespace std;
int flag[1000100];
int ans[1000100];
int N = 1e6+10;
void get()
{
memset(flag,0,sizeof(flag));
memset(ans,0,sizeof(ans));
int i, j;
int tmp;
for(i = 5; i <= 200010;i+=4)
{
for(j = 5; j*i < N; j+=4)
{
tmp = j*i;
if(flag[i]==0&&flag[j]==0)
{
if(tmp%4==1)///确保是H数
flag[tmp] = 1;
}
else
flag[tmp] = -1;
}
}
int ant = 0;
for(i = 1; i < N; i++)
{
if(flag[i]==1)
ant++;
ans[i] = ant;
}
}
int main()
{
int n;
get();
while(~scanf("%d",&n)&&n)
{
printf("%d %d\n",n,ans[n]);
}
return 0;
}

本文深入探讨了H-number的概念及其性质,特别关注于H-semi-prime数的定义与计算方法。通过算法实现,本文提供了一种有效计算指定范围内H-semi-prime数的数量的方法。
174

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



