hdu 2098 分拆素数和 悲剧超时了。

本文探讨了两种求解素数分拆问题的算法:筛子法与逐个检查法。通过实例比较了两种方法的效率,展示了如何使用C语言实现这两种算法,并讨论了在提交代码时遇到的时间限制问题及解决策略。

分拆素数和,悲剧,写出来测试数据通过了,但提交时显示Time limit exceeded.....百度一下,打表就ok了(解题思路:打表打出10000以内素数)

两种方法:对比。。第一个是case 2.....时间多,内存少。。第一种方法效率高多了。。打表时,快。。。

case 1:2011033001525969.png

 


  
#include < stdio.h >
#include
< string .h >
#include
< stdlib.h >
#include
< math.h >
#define M 10001

void fun( int * prime)
{
int a,i,j,k;
for (i = 4 ;i <= M;i = i + 2 )
prime[i]
= 1 ;
a
= sqrt(M);
for (i = 3 ;i <= a;i ++ )
for (j = i * i;j <= M;j = j + i)
{
if (prime[j] == 1 )
continue ;
prime[j]
= 1 ;
}
}
int main( )
{
int prime[M + 1 ],A[M + 1 ],i,j,k = 0 ,m,n,count = 0 ;
memset(prime,
0 , sizeof (prime));
prime[
1 ] = 1 ;
fun(prime);
for (i = 2 ;i < M;i ++ )
{
if (prime[i] == 0 )
{
A[k
++ ] = i;
}
}
while (scanf( " %d " , & n) != EOF,n)
{

for (i = 0 ;i < k;i ++ )
{
m
= n - A[i];
if (m > 0 )
{
if (prime[m] == 0 && A[i] != m)
count
++ ;
}
else
break ;

}
printf(
" %d\n " ,count / 2 );
count
= 0 ;
}
// system("pause");
return 0 ;
}

case 2: 我用第二种方法做时,不断提示TIME limit exceeded....加了个循环遍历之后,呵呵,过了。。


  
#include < stdio.h >
#include
< stdlib.h >
#include
< math.h >
int main()
{
int n,A[ 10000 ],i,j,k = 1 ,t = 0 ;

A[
0 ] = 2 ;
for (i = 3 ;i <= 10000 ;i ++ )
for (j = 2 ;j < i;j ++ )
{
if (i % j == 0 )
break ;
else
if ((i % j != 0 ) && (i == j + 1 ))
{
A[k
++ ] = i;

}
}
while (scanf( " %d " , & n) != EOF,n)
{


t
= 0 ;
int p;
for (i = 0 ;i < k;i ++ )
if (A[i] > n)
p
= i;
// int p=sqrt(n);
for (k = 0 ;k <= p;k ++ )
for (j = k + 1 ;j <= p;j ++ )
if (A[k] + A[j] == n)
t
++ ;
// t=0;
printf( " %d " ,t);


printf(
" \n " );
// k=1;
}
//system(
" pause " );
}

找出2->N之间的所有质数有两种方法。。一种是用“筛子法”,另一种是从2->N检查,找出质数。

详细请况,请看高手之空间。。http://hi.baidu.com/redraiment/blog/item/948ce93d271164c39e3d620c.html

转载于:https://www.cnblogs.com/tangcong/archive/2011/03/30/1999358.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值