关于C++ for语句的一道题

Description
给定一个区间[a, b],求出这个区间内的素数。

Input
第1行:2个整数a, b(1≤a<b≤10^6)

Output
第1行: 1个整数k,表示区间[a,b]内的素数个数
第2行:k个用空格分开的素数,递增排列,1个空格分开。每行输出10个素数,最后一行也要输出换行符。

Sample Input
10 20

Sample Output
4
11 13 17 19

以上是描述
要在1秒之内运行完 这是我的程序 请问大神们应该怎么修改 缩短时间
#include<iostream>
using namespace std;
int main()
{
int a,b,c,d=0,e,f,g,i=0;
cin >> a >> b;
for(c=a;c<=b;c++)
{
for(e=c-1;e>=1;e--)
{
if(c%e==0)
break;
}
if(e==1)
d++;
}
cout << d << endl;
for(f=a;f<=b;f++)
{
for(g=f-1;g>=1;g--)
{
if(f%g==0)
break;
}
if(g==1)
{
i++;
if(i%10==0)
cout << f << endl;
else
cout << f << ' ';
}
}
cout << endl;
return 0;
}

#include <iostream>
#include <cmath>
#include <iomanip>
#define REPLACE " is not a prime number!"
#define REP " is a prime number!"
using namespace std;
int main ()
{
int n,i,k;
cout<<"input n:";
cin>>n;
if(n==1||n==2)
cout<<n<<REPLACE<<endl;
else if(n==3)
cout<<n<<REP<<endl;
else
k=int(sqrt(n));
for(i=2;i<=k;i++)
if(n%i==0)
{cout<<n<<REPLACE<<endl;
break;}
else
cout<<n<<REP<<endl;
return 0;
}
这个程序我不做解释了!楼主既然问这种问题那自然是懂一些的,这个是初学者的程序,比较繁琐,但是简单易懂!有什么需要再联系我!
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-12-04
找台好电脑呗本回答被网友采纳
第2个回答  2010-12-05
主要有两个需要改的地方:
1、循环不用从c-1开始,从c/2开始就可以了。
2、输出的时候没有必要再重新计算一遍素数。

#include <iostream>
#include <vector>
using namespace std;
int main()
{
int a, b, i, j, cnt;
cin >> a >> b;
vector<int> prim;//动态素数数组
if(a<2) a=2;//不存在小于2的素数
if(a==2){//2是个特别的素数,特殊照顾一下
prim.push_back(2);
a=3;
}
for(i=a; i<=b; i++){//从a到b之间的数挨个判断
for(j=(i>>1); j>1; j--){
if(i%j==0) break;
}
if(j==1){//是素数,保存到动态数组中
prim.push_back(i);
}
}
cnt = prim.size();//取得动态素数数组的元素个数
cout << cnt << endl;//输出素数个数
for(i=0; i<cnt; i++)//从小到大依次输出每个素数
cout << prim[i] << (i%10==9?'\n':' ');//是每行的第10个就换行,不是第10个就空格
if(cnt%10!=0) cout << '\n';//如果最后一行不够10个则再给最后一行加换行。
return 0;
}
第3个回答  2010-12-05
#include<iostream.h>
bool judge(int n) //判断n是否为素数
{
int i;
for(i=2;i<=n/2;++i) //一个数除了自身之外的最大因子不可能超过n/2
{
if(!(n%i)) //如果其中有任何一个能整除n,那么n不是素数
return false;
}
return true;//如果在2到n/2内没有一个因子,则为素数
}
void main()
{
int a,b;
int temp=0; //控制输出格式,同时统计个数
cout<<"请输入a、b:";
cin>>a>>b;
for(int i=a;i<=b;++i)
{
if(judge(i))
{
temp++;
cout<<i<<" ";
if(!(temp%10)) //每行10个数
cout<<endl;
}
}
cout<<endl;
cout<<temp<<endl; //素数个数
}

说明一下,我的代码基本满足你的要求,就是最后输出的时候把素数的个数放在后面输出,否则不一定能很简便的输出。因为可能要定义其他的数组或计数变量,对程序的速度有影响。希望楼主以后的代码能够有标注,要不然影响看问题的速度。

这道C++题目怎么做?两条for语句连起来这么看啊?
这是一道for语句的嵌套题目。它分内外两层循环:外循环变量i,取值从0到3,共循环4次;内循环变量j,取值从0到i-1,循环次数跟i有关。循环体只有一句:就是m加上1。下面具体看一下循环次序:第一次外循环i=0,进入内循环,j=0<i=0不成立,所以内循环一次也没有执行就完成了,也就是没有执...

C++for函数的问题,for(e=0, ip=m; e<3; e++, ip+=3),m是确定的值,这个...
只是一层循环。一个for只能是一个循环,不过循环一次执行两个条件:e++,ip=ip+3;而已。for(表达式1;表达式2;表达式3) 语句 for语句的执行过程:(1) 先求解表达式1。 (2) 求解表达式2,若其值为真(值为非0),则执行for语句中指定的内嵌语句,然后执行下 面第(3)步。若为假(值为0),则...

用c++中的for语句做:一个球从100m高度自由落下,每次落地后又反跳回原来...
int high = 100;for(int i = 1;i <=10;i++){ sum += high;high \/=2;if(i != 1){ sum += high;} } cout << sum << high<<"endl";

C++ for循环问题 下面循环语句执行多少次? for(int i=0 , j=5; i=...
循环了5次。首先,要明白i=j不是i==j。第二,for语句中的i=j即是(i=j)!=0的意思。第三,i=j是赋值语句了。将j值赋给i,所以只有在j=0时,才结束该循环。这是鄙人的意见,望起到抛砖引玉之功效。

C++问题: (1). 第一次运行for循环的时候,a=11,m=11,满足m<=b,然后执 ...
5)<<m;,如果想要if控制cout<<setw(5)<<m;要改成:if(l++%10 == 0){ cout<<endl;cout<<setw(5)<<m;}。所以第一次执行时,程序输出换行符(空行),之后只有数据(不再输出换行符)。这两种写法的区别如下:1)原题写法 按原题写法时的输出:2)修改后:修改后的执行结果:...

...的C++的问题?!请教一个问题:下列程序通过for语句重复相加0.01共10次...
const float eps = 1e-6;\/\/定义一个精度 int main(){ float a=0.1,b=0.0;for(int i=0;i<10;i++)b=b+0.01;cout<<b<<endl;if(fabs(a-b)<=eps)\/\/如果它们的差值的绝对值在精度内,就可以认为是相等的 cout<<"相等"<<endl;else cout<<"不相等"<<endl;return 0;} ...

C++循环问题:for(i=0,j=10,k=0;i<=j;i++,j-=3,k=i+j);cout<<k;_百度...
逗号表达式是从左到右计算的。

求C++高手 指教 ,求答案
5.在 for 语句中,假定循环体被执行次数为 n, 则 < 表达式 1> 共被计算 _1_ 次, < 表达式 2> 共被计算 __n+1___ 次, < 表达式 3> 共被计算 ___n__ 次。6.执行 for 和 while 循环时,每次是先进行 __循环条件___ 的判断,然后再执行 __循环体___,执行 do 循环时...

C++ for语句执行循环次数问题
首先,请注意C++中i = j的意思是把i赋值为j,判断i与j是否相等的表达式为i == j。(例如:if (enemy == 0) win(); 当敌人没有了时,游戏获胜)i=j其实是一个表达式,有一个返回值,是赋值后的i的值,比如表达式i = 3的值为3。这样,只有当执行循环体后(i = j) == 0,即j的值...

帮忙用C++做一道题
include<iostream> using namespace std;int main(){ int i,j,n;float s,t,z,a[3][1000];cin>>n>>z;for(i=1;i<=n;i++)cin>>a[0][i]; \/\/录入库存 for(j=1;j<=n;j++){cin>>a[1][j]; \/\/录入总价并计算单价 a[2][j]=a[1][j]\/a[0][j];} for(i=1;...

相似回答
大家正在搜