HDU1164_Eddy's research I_素数筛选法

题目大意:          让你输入一个数n,然后将n拆分为n内的素数的乘积。 解题思路:           先把素数打表,然后暴力即可。 代码:
#include
#include
using namespace std;
const int MAX=65540;
int p[8]={4,2,4,2,4,6,2,6};

int num[MAX];
int Prime(int n)//判断素数
{
    int i=7,j,q;
    if(n==1)//1不是素数,也不是合数
          return 0;
    if(n==2||n==5||n==3)
          return 1;
    if(n%2==0||n%3==0||n%5==0)
           return 0;
    q=(int)sqrt((double)n);
    for(;i<=q;)
    {
        for(j=0;j<8;j++)

       {
            if(n%i==0)return 0;
            i+=p[j];
        }
        if(n%i==0)return 0;
    }
    return 1;
}

void initPrime()
{
	memset(num,0,sizeof(num));
	int end=(int)pow(2.0,15);
	for(int i=1;i<=end;i++)
	{
		if(Prime(i))
			num[i]=1;
	}
}

int main(void)
{
	int n;
	initPrime();
	while(cin>>n)
	{
		int flag=0;
		int temp=n;
		while(temp!=1)
		{
			for(int i=2;i<=n;i++)
			{
				if(num[i] && temp%i==0)
				{
					temp/=i;
					if(!flag)
					{
						cout<
原文地址:https://www.cnblogs.com/cchun/p/2520174.html