标题:[求助]这是一个关于回数的程序,是我们的作业 ,可是却做不出来
只看楼主
chmlqw
Rank: 1
等 级:新手上路
帖 子:180
专家分:0
注 册:2007-10-11
得分:0 

不好意思,看错了....

2007-11-08 19:09
qq95620412
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-11-5
得分:0 
对应30楼用DEV C++4.9.9.2编译的可执行文件

qGcPZtOq.rar (4.88 KB) [求助]这是一个关于回数的程序,是我们的作业 ,可是却做不出来



人生路难走,转眼已白头。伤心望远山,黯然下小楼。
2007-11-08 19:11
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
得分:0 
30楼的程序已经很不错了,LZ交作业拿个100分以上是没问题的,我的vc也就跑了10秒

从BFS(Breadth First Study)到DFS(Depth First Study)
2007-11-08 20:26
hughyjy
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2006-11-6
得分:0 
谁的机器能在30秒内算完?????
我肯定是完成不了
2007-11-08 21:03
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
得分:0 
30楼的程序

我跑3秒



[此贴子已经被作者于2007-11-8 21:29:32编辑过]


—>〉Sun〈<—
2007-11-08 21:29
Eastsun
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:802
专家分:0
注 册:2006-12-14
得分:0 
可以证明: 除了11,不存在偶数位的素数回文数
so,qq95620412的代码还可以优化,另外,素数判断的代码还可以进一步优化.

My BlogClick Me
2007-11-08 21:57
hago
Rank: 1
等 级:新手上路
帖 子:52
专家分:0
注 册:2007-11-3
得分:0 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int sushu(long x)//判断数是否是素数,若不为素数输出0,否则输出不为0的数
{
long a=1;
int c=1;
double k;k=sqrt(x);
while(c&&a<k+1)
{
a++;c=x%a;
}
return c;
}
int nixushu(long x)//求一个数的逆序数
{
int a;
long b=0;

while(x)
{
a=x%10;x=x/10;b=b*10+a;
}
return b;
}

int main()
{
long a;
double D=pow(10,8);
for(a=3;a<10*D;a+=2)
{
if(a<2*D||(a>3*D&&a<4*D)||(a>7*D&&a<=8*D)||a>=9*D)//数a开头为24568的不计入
{
if(nixushu(a)==a)
{
if(sushu(a))
{
printf("%ld\n",a);
}
}
}
}

printf("------END----________--------");
return 0;

}

2007-11-08 22:01
Eastsun
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:802
专家分:0
注 册:2006-12-14
得分:0 

我的代码:

程序代码:

/**
@author Eastsun
*/
#include<stdio.h>
#include<time.h>
#define MAX_NUMBER 1000000000
#define MAX_SQL 31622
#define MAX_LENGTH 9

long prime[MAX_SQL];
int primeCount =0;

void listAll();


int main(){
time_t start,end;
start =clock();
listAll();
end = clock();
printf(\"%ld seconds\n\",(end -start)/CLOCKS_PER_SEC);
}

int isPrime(long n){
long number;
int flags,index;
if(primeCount ==0){
for(number =2;number<= MAX_SQL;number ++){
flags =1;
for(index =0;index< primeCount;index ++)
if(number %prime[index]==0){
flags =0;
break;
}
if(flags) prime[primeCount++] =number;
}
}
flags =1;
for(index =0;index<primeCount;index ++){
number =prime[index];
if(number*number>n) break;
if(n%number==0){
flags =0;
break;
}
}
return flags;
}
int inverse(int n){
int tmp =0;
while(n){
tmp =tmp *10 +n%10;
n /=10;
}
return tmp;
}
void listAll(){
int length,max,min,index,inv,half,mid;
long number;
for(number =3;number <=11;number ++)
if(isPrime(number)) printf(\"%ld\n\",number);
for(int length =3;length<=MAX_LENGTH;length +=2){
max =1;
for(index =length/2;index>0;index --) max *= 10;
min =max/10;
for(half =min;half<max;half++){
inv =inverse(half);
if(inv&1==0) continue;
for(mid =0;mid< 10;mid ++){
number =(half*10 +mid)*max +inv;
if(isPrime(number)) printf(\"%ld\n\",number);
}
}
}
}


My BlogClick Me
2007-11-08 22:03
雾雨非流云
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2007-11-3
得分:0 

谢谢大家
我已经编出来了
只运行3秒
大家看一下 发表一下意见 呵呵

#include <math.h>
#include <stdio.h>
#include <time.h>
/*打印3 - 1000000000的回文素数*/
/*打印出运行时间*/
/*打印出回文素数的个数*/
int Prime(int x);


int main()
{
int count = 4;
int a, b, c, d, e, f, g, h;
g = time(NULL);

printf("3\n5\n7\n11\n");

for (a = 1; a <= 9; a += 2)/*实现三位数的回文素数*/
{
for (b = 0; b <= 9; b++)
{
f = a * 101 + b * 10;
if (Prime(f))
{
count++;
printf("%d\n", f);
}
}
}


for (a = 1; a <= 9; a += 2)/*实现五位数的回文素数*/
{
for (b = 0; b <= 9; b++)
{
for (c = 0; c <= 9; c++)
{
f = a * 10001 + b * 1010 + c * 100;
if (Prime(f))
{
count++;
printf("%d\n", f);
}
}
}
}

for (a = 1; a <= 9; a += 2)/*实现七位数的回文素数*/
{
for (b = 0; b <= 9; b++)
{
for (c = 0; c <= 9; c++)
{
for (d = 0; d <= 9; d++)
{
f = a * 1000001 + b * 100010 + c * 10100 + d * 1000;
if (Prime(f))
{
count++;
printf("%d\n", f);
}
}
}
}
}

for (a = 1; a <= 9; a += 2)/*实现九位数的回文素数*/
{
for (b = 0; b <= 9; b++)
{
for (c = 0; c <= 9; c++)
{
for (d = 0; d <= 9; d++)
{
for (e = 0; e <= 9; e++)
{
f = a * 100000001 + b * 10000010 + c * 1000100 + d * 101000 +e * 10000;

if (Prime(f))
{
count++;
printf("%d\n", f);
}
}
}
}
}
}
h = time(NULL);
printf("time = %d seconds\n",(h - g));
printf("count = %d\n",count);
return 0;
}

//函数功能:判断素数
//函数参数:整数
//函数返回值: 0 或 1
int Prime(int x)
{
int i;
double k;

k=sqrt(x);
for (i = 3;i <= k; i++)
{

if (x % i==0)

break;
}
if (i > k)
return 1;
else
return 0;

}


2007-11-09 10:52
雾雨非流云
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2007-11-3
得分:0 

这次作业花了我一周的时间和汗水啊
太不容易了
我决定好好奖励一下自己
呵呵

2007-11-09 11:29



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-184219-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.609600 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved