| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1184 人关注过本帖
标题:[求助]关于一道题的N个不同的解法!(有疑惑)
取消只看楼主 加入收藏
wzhings
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2007-1-16
收藏
 问题点数:0 回复次数:5 
[求助]关于一道题的N个不同的解法!(有疑惑)

题目描述:
哥德巴赫猜想:任意一个大于等于4的偶数都能表示为两个质数之和

输入:
有多组测试数据,每行一个小于1e7的并且大于2的偶数
以EOF标志结束程序。

输出:
对于每组测试,输出拆分的结果,有多组结果则都要输出
输出顺序按拆分的第一个数的大小从小到大输出


这是我前几天看到的一个题目,也见到了几个人的代码,但是有些疑问..
希望有人指点.

一.
#include<stdio.h>
#include<math.h>/*这个头函数,MS加了没有用啊!*/
int main()
{int prime(long n);
long i,j;
int n=1;
while(j!=0)
{ if(n==4)
{
printf("4=2+2\n");
continue;
}
printf("input the num to ceshi:");
scanf("%ld",&j);
for(i=3;i<=j/2;i+=2)
{if(prime(i)&&prime(j-i)&&j-i>1)/*-i>1这个条件好像没用的,只要前两项就好!*/
printf("%ld=%ld+%ld\n",j,i,j-i);
}
}
return 0;
}
int prime(long n)
{
int i,flag=1;
for(i=2;i<=n/2;i++)/*这个是求素数的算法吗?为啥不是sqrt(n)*/
{if(n%i==0)
flag=0;
}
return(flag);
}

二.
#include <stdio.h>

/**
n>=3 and n is odd.
*/
int isPrime(int n)
{
int k, upperBound=n/2;

for(k=3; k<=upperBound; k+=2)
{
upperBound=n/k;/* 这个语句没看懂是起啥作用的*/
if(n%k==0)
reurn 0;
}

return 1;
}

int main()
{
int n, k, nHalf;

while(scanf("%d", &n)!=EOF)
{
nHalf = n>>1;/*这个右移一位的作用?没看懂*/
for(k=3; k<=nHalf; k+=2)
{
if(isPrime(k)==1 && isPrime(n-k)==1)
{
printf("%d=%d+%d\n", n, k, n-k);
}
}
}

return 0;
}



[此贴子已经被作者于2007-10-20 21:36:23编辑过]

搜索更多相关主题的帖子: 解法 
2007-10-20 21:35
wzhings
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2007-1-16
收藏
得分:0 

这是我最初的代码...好像在算法上有问题..
因为我感觉上面的几种方法,都没有太按要求来做..(eg.1)每行一个小于1e7的并且大于2的偶数;2)有多组结果则都要输出
输出顺序按拆分的第一个数的大小从小到大输出

编译好像能行了..(在Dev C++上.但是不能运行啊!??)

#include <stdio.h>
#include <conio.h>
#include <math.h>
int prime(long int);
int main(void)
{
long int num[10];
int i=0;
int n,t;
printf("Please input numbers:\n");
while(1)
{
scanf("%d\n",&num[i]);
if(num[i]<=2&&num[i]>=1e7)
printf(" error\n");
else if (num[i]==EOF)
break;
else
i++;
}
for(n=0;n<=i;n++)
for(t=3;t<=num[i]/2;t+=2)
{
if(prime(t)&&prime(num[i]-t))
printf("%ld=%ld+%ld\n",num[i],t,num[i]-t);
}
getch();
return 0;
}

int prime (long int n)
{
int k,i;
k=(int)sqrt(n);
for(i=2;i<=k;i++)
if (n%i==0)
return 0;
else
return 1;
}


在我的眼里,这个世界是由0和1组成的!~
2007-10-20 21:40
wzhings
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2007-1-16
收藏
得分:0 

再想说一下下...
1)
那个求素数的算法..是不是判断该数能不能被从3到sqrt(n)这个范围的数整除吧..(步长为2)..??


2)
关于EOF..
一直不知"以EOF结尾"是怎么表示,于是出现了 if(num=='EOF') break;这样的语句..
后来才知道是ctrl+Z....



我知道我又犯挺白痴的问题了...


在我的眼里,这个世界是由0和1组成的!~
2007-10-20 21:45
wzhings
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2007-1-16
收藏
得分:0 
以下是引用卧龙孔明在2007-10-20 21:41:15的发言:
>>1 等同于 /2
求素数的算法可以是n/2,只不过速度不如sqrt(n)


所谓的速度不如sqrt的,是不是因n/2要循环的次数多于sqrt的情况?


在我的眼里,这个世界是由0和1组成的!~
2007-10-20 21:47
wzhings
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2007-1-16
收藏
得分:0 

for(k=3; k<=upperBound; k+=2)
{
upperBound=n/k;/* 这个语句没看懂是起啥作用的*/
if(n%k==0)
reurn 0;



那上述语句中的upperBoun=n/k,又咋理解呢??


在我的眼里,这个世界是由0和1组成的!~
2007-10-20 21:49
wzhings
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2007-1-16
收藏
得分:0 
出现printf语句,有啥不妥吗?

在我的眼里,这个世界是由0和1组成的!~
2007-10-21 15:14
快速回复:[求助]关于一道题的N个不同的解法!(有疑惑)
数据加载中...
 
   



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

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