您的位置:首页 > 编程语言 > Go语言

HDU 1164 Eddy's research I(素数)

2015-08-19 11:14 495 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1164

题        意:将n分解为素因子的形势。

思        路:

           一:将 素数打表再暴力求解。

代码如下:#include <iostream>
using namespace std;
#include <string.h>
#include <stdio.h>
#include <climits>
#include <algorithm>
#define maxn 65535
typedef __int64 LL;
int a[maxn];
int prime[maxn];
int main()
{
memset(a,1,sizeof(a));
for( int i = 2; i <= maxn; i ++ )
{
if( a[i] )
for( int j = i+i; j <= maxn; j += i )
a[j]=0;
}
int j = 0;
for( int i = 2; i < maxn; i ++ )
{
if( a[i] ) prime[j] = i,j++;
}
int n;
while( scanf ( "%d", &n ) != EOF )
{
int f = 1;
for( int i = 0; i < j; i ++ )
{
if( n == 1 ) break;
while( n%prime[i] == 0 )
{
if( f )
{
printf("%d",prime[i]);
f=0;
}
else printf("*%d",prime[i]);
n /= prime[i];
}
}
printf("\n");
}
return 0;
}            二: 打表后用DFS遍历求解。
代码如下:#include <iostream>
using namespace std;
#include <string.h>
#include <stdio.h>
#include <climits>
#include <algorithm>
#define maxn 65535
typedef __int64 LL;
int a[maxn], n, k;
int prime[maxn];
void DFS( int x )
{
if( x == 0 ) return ;
for( int i = 0; i < k; i ++ )
{
if( x%prime[i] == 0 )
{
printf( x==n?"%d":"*%d",prime[i] );
DFS( x/prime[i] );
break;
}
}
}
int main()
{
memset(a,1,sizeof(a));
for( int i = 2; i <= maxn/2; i ++ )
{
if( a[i] )
for( int j = i+i; j <= maxn; j += i )
a[j]=0;
}
k = 0;
for( int i = 2; i < maxn; i ++ )
{
if( a[i] ) prime[k++] = i;
}
while( scanf ( "%d", &n ) != EOF )
{
DFS( n );
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  algorithm