无平方因子的数(数论好题)

题目:(题目跟分析基本都是书上,我只是敲几个代码跟大家分享)

无平方因子的数。 给出正整数n,m。区间[n,m]内  “无平方因子” 的数有多少个??

整数p无平方因子,当且仅当存在k>1,使得p是k^2的倍数.    1<=n<=m<=10^12;  n-n<=10^7

分析:

     直接枚举肯定会超时,

     使用的方法和筛选素质类似的,对于不超过 sqrt(m)的所有素数p,筛掉区间[n,m]内p^2的倍数

    以下是我的写代码(没有提交过OJ,但我尝试过一些数据,没有错。如果不妥还望指出

  

#include"stdio.h"
#include"stdlib.h"
#include"string.h" 
#include"math.h"
const int maxn=100005;
int p[maxn];
int prim[maxn];
int len=0;
void prime(int m)
{
	memset(p,0,sizeof(p));
	int k=sqrt(m+0.5);
	p[1]=1; 
	for(int i=2;i<=k;i++)
	{
		if(!p[i])
	    for(int j=i*i;j<=m;j+=i)
	       p[j]=1;
    }
    len=0;
    for(int i=1;i<=m;i++)   //将质数p[i]->prim[i] 
    {
    	if(!p[i])  //质数
		   prim[len++]=i;  //保存这些质数 
	}
}
bool is_ping(int k)//是否是平凡因子 
{
	for(int i=0;i

你可能感兴趣的:(数据结构和算法)