HDOJ 1164 Eddy's research

时间:2023-03-10 04:32:08
HDOJ 1164 Eddy's research

上一篇已经讲了,但是转载别人的很乱,这里自己根据blog里面写的思路,重新写过了一个程序

 #include <iostream>
#include <malloc.h>
#include <math.h>
#define N 65535 int primes[N];
int SimpleDivsion()//生成1-65535之间所有的质数
{
int count=;
int i,j;
//int *primes = (int *)malloc(sizeof(int)*n);
primes[count++]=; for(i=;i<=;i++)
{
for(j=;j<=(int)sqrt((double)i);j++)//这里要进行强制转换
{
if(i%j==)
break;
}
if(j>(int)sqrt((double)i))
{
primes[count++]=i;
}
}
return count;
//for(i=0;i<count;i++)
//printf("%d ",primes[i]);
//printf("\n");
} int main()
{
int test,i,count;
count=SimpleDivsion();
while(scanf("%d",&test)!=EOF)
{
int flag=;
i=;
for(;i<count;i++)
{
if(test%primes[i]==)
{
if(flag)
{
flag=;
printf("%d",primes[i]);
}
else
printf("*%d",primes[i]);
test=test/primes[i];
i=-;//每次都要重新开始,为什么是-1.因为执行i++后就是0,有没有更好的方法?
//将if(test%primes[i]==0)这句话换成while(test%primes[i]==0)即可将i=-1去掉
}
if(test==)
break;
}
printf("\n");
}
}