找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 1839|回复: 9

帮忙改改

[复制链接]
发表于 2009-10-31 01:15:03 | 显示全部楼层 |阅读模式 IP:江苏扬州
这是一个判断两个大于0且不等的数a,b间素数个数(包括a,b)的程序
我在一个判断网站判断的结果是程序时间消耗过大
帮忙看看:
思想是sushu(int a)是一个素数判断程序
特点:它只对奇数判断有效果 是素数flag=0,否则flag=1;
而且1 flag=0;
sushuab(int a,intb)是解决本题的函数,a=1时:1代替2作为素数所以总素数的个数不变,不对偶
数进行判断。a=2时: 判断的结果+1。a>2时 没有影响。
#include <iostream.h> #include <math.h> int sushu(int a) { int k,n,flag; flag=0; n=int(sqrt(a)); for(k=3;k<=n;k=k+2) { if(a%k==0) { flag=1; break; } } return flag; }
void sushuab(int a,int b) { int i; int j=0; int c; c=(int)(a/2)*2+1; for(i=c;i<=b;i=i+2) { if(sushu(i)==0) j++; } if(a==2) j=j+1; cout<<j<<endl; } int main() { int a,b; do{ cin>>a>>b; sushuab(a,b); }while(1); return 0; }
发表于 2009-10-31 01:15:04 | 显示全部楼层 IP:江苏扬州
下面是我写的,你看这样可以吗?
#include<iostream.h> #include<math.h>
int prime(int a,int b) { int count=0;
if(a==2) { count++; a++; } else if(a==3) { count++; a+=2; }
if(a%2==0) a++; if(b%2==0) b--;
for(int i=a;i<=b;i+=2) { if(i%3==0) continue; for(int j=3;j<(int)sqrt(i);j+=2) { if(i%j==0) break; } count++; } return count; }
void main() { int a,b,temp; cin>>a>>b; while(a>1&&b>1) { if(a>b) { temp=a; a=b; b=temp; } cout<<prime(a,b)<<endl;
cin>>a>>b; } }
回复

使用道具 举报

发表于 2009-10-31 01:15:05 | 显示全部楼层 IP:江苏扬州
可能不行
这个的a要允许从1开始
另:我对这个程序的测试结果是 输入2 100输出33
可能还要修改,我也把你这个程序发到测试网站上了,结果是WRONG ANSWER
回复

使用道具 举报

发表于 2009-10-31 01:15:06 | 显示全部楼层 IP:江苏扬州
我试了一个,不过好象有问题,帮忙看看。
#include <iostream> #include <math.h> using namespace std; int prime(int a) { int i,k,flag; k=(int)sqrt((double)a); for(i=2;i<=k;i++) if(a%i==0) {flag=0; break;} if(i>=k+1) flag=1; return flag; } int prime(int a,int b,int count) { if(a>b){ int temp=a;a=b;b=temp;} for(int i=a;i<=b;i++) if(prime(i)) count++; return count-2;} int main() { int a,b,count; cout<<"enter two numbers:"; cin>>a>>b; cout<<prime(a,b,count)<<endl; //cout<<"there are "<<prime(a,b,count)<<" primes from " //<<a<<" to "<<b<<endl; system("pause"); return 0; }
回复

使用道具 举报

发表于 2009-10-31 01:15:07 | 显示全部楼层 IP:江苏扬州
帮忙看看
回复

使用道具 举报

发表于 2009-10-31 01:15:08 | 显示全部楼层 IP:江苏扬州
@ alixnua: 老兄:我根据您的程序写了一个,请指正: #include <iostream> using namespace std;
int prime(int start, int end) { int count = 0; for(int i = start; i <= end; i++) { int flag = 0; for(int j = 1; j <= i; j++) { flag += (i % j == 0); } if (flag == 2) { cout << i << endl; count++; } } return count; } int main() { int a, b; cout << "enter two numbers:"; cin >> a >>b; //cout << prime(a, b) << endl; cout<<"there are "<<prime(a, b) << " primes from " <<a<<" to "<<b<<endl; system("pause"); return 0; }
回复

使用道具 举报

发表于 2009-10-31 01:15:09 | 显示全部楼层 IP:江苏扬州
玩具兵:
很漂亮啊!我的程序有问题,而且感觉很烦。
以后多多交流哦,我刚学的:)
回复

使用道具 举报

发表于 2009-10-31 01:15:10 | 显示全部楼层 IP:江苏扬州
哈哈,这是我的代码为什么漂亮的原因,下载一个软件SyntaxHlt就搞定了:
http://www.codeguru.com/Cpp/misc/samples/codehighlighting/article.php/c4693/
回复

使用道具 举报

发表于 2009-10-31 01:15:11 | 显示全部楼层 IP:江苏扬州
#include<iostream.h> #include<math.h>
int prime(int a,int b) { int count=0; bool flag=1;
if(a==2) { count++; a++; } if(a==3) { count++; a+=2; }
if(a%2==0) a++; if(b%2==0) b--;
for(int i=a;i<=b;i+=2) { if(i%3==0) continue; for(int j=3;j<(int)i/2;j+=2) { if(i%j==0) { flag=0; break; } }
if(flag==1) count++; } return count; }
void main() { int a,b,temp; cin>>a>>b; while(a>0&&b>0) { if(a>b) { temp=a; a=b; b=temp; } cout<<prime(a,b)<<endl;
cin>>a>>b; } }
回复

使用道具 举报

发表于 2009-10-31 01:15:12 | 显示全部楼层 IP:江苏扬州
一下是一些数据
INPUT
1 10
OUTPUT 4
1 100
OUTPUT 25
live41的程序,1 100 输出8
要求程序对300000以内的数有效
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 15:23 , Processed in 0.262725 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表