C 使用筛选法求100以内的素数

合集下载

C语言程序设计(第三版)习题库答案

C语言程序设计(第三版)习题库答案

C语言程序设计(第三版)习题库1、设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。

用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。

请编程序。

#include<stdio.h>main(){floatr,h,C1,Sa,Sb,Va,Vb;scanf(__”%f”__,&r);scanf(”%d”,__&h_);;C1=2*3.14*r;Sa=3.14*r*r;Sb=4*Sa;Va=4*3.14*r*r*r/3;Vb=Sa*h;printf(___”Cl=%.2fSa=%.2fSb=%.2fVa=%.2fVb=%.2f”,C l,Sa,Sb,Va,Vb);}2、输入一个华氏温度,要求输出摄氏温度。

公式为c=5(F-32)/9 输出要求有文字说明,取位2小数。

#include<stdio.h>main(){floatF,c;scanf("%f",&F);____c=5*(F-32)/9______;printf("c=%.2f",c);}3、有一函数:⎪⎩⎪⎨⎧≥-<≤-<=10113101121x x x x x xy 写一程序,输入x 值,输出y值。

#include<stdio.h>main(){intx,y;printf("输入x :");scanf("%d",&x);if(x<1){/*x<1*/y=x;printf("x=%3d,y=x=%d\n",x,y);}elseif(____x<10_______){/*1≤x -10*/_____y=2*x-1_______;printf("x=%3d,y=2*x-1=%d\n",x,y);}else{/*x≥10*/y=3*x-11;printf("x=%3d,y=3*x-11=%d\n",x#include"st dio.h"main(){intx,y;scanf("%d",&x);if(x<1){y=x;}elseif(x>=1&&x<10) {y=2*x-1;}else{y=3*x-11;}printf("%d",y);}#include"stdio.h" main(){intx,y;scanf("%d",&x);if(x<1){y=x;}elseif(x>=1&&x<10) {y=2*x-1;}else{y=3*x-11;}printf("%d\n",y);}#include"stdio.h"main(){intx,y;scanf("%d",&x);if(x<1){y=x;}elseif(x>=1&&x<10){y=2*x-1;}else{y=3*x-11;}printf("%d",y);}scanf("%d",&x);if(x<1){y=x;}elseif(x>=1&&x<10){y=2*x-1;}else{y=3*x-11;}#include"stdio.h" main(){intx,y;scanf("%d",&x);if(x<1)y=x;elseif(x>=1&&x<10)y=2*x-1;elsey=3*x-11;printf("%d",y);},y);}}4、给定一个不多于5位的正整数,要求:①求它是几位数;②按逆序打印出各位数字。

C语言程序设计(第三版)习题库答案

C语言程序设计(第三版)习题库答案

C 语言程序设计(第三版)习题库1、设圆半径r=1。

5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。

用scanf 输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。

请编程序. #include <stdio 。

h>main(){float r ,h,C1,Sa ,Sb ,Va,Vb;scanf(__”%f ”__,&r );scanf (”%d",__&h _);;C1=2*3.14*r;Sa=3。

14*r*r;Sb=4*Sa ;Va=4*3.14*r *r *r/3;Vb=Sa*h ;printf (___"Cl=%.2fSa=%.2fSb=%.2fVa=%。

2fVb=%。

2f ”,Cl ,Sa ,Sb ,Va,Vb ); }2、输入一个华氏温度,要求输出摄氏温度。

公式为 c=5(F-32)/9输出要求有文字说明,取位2小数。

#include <stdio.h 〉main(){float F,c ;scanf("%f",&F);____c=5*(F-32)/9______;printf ("c=%.2f”,c);}3、有一函数:⎪⎩⎪⎨⎧≥-<≤-<=10113101121x x x x x x y 写一程序,输入x 值,输出y 值。

#include <stdio.h 〉main(){int x,y;printf(”输入x :”);scanf("%d",&x);if (x<1) { /* x<1 */y=x;printf("x=%3d, y=x=%d\n",x ,y);} else if (____x 〈10_______){ /* 1≤x—10 */_____y=2*x-1_______;printf("x=%3d , y=2*x —1=%d\n",x,y );} else { /* x≥10 */y=3*x —11;printf (”x=%3d, y=3*x —11=%d\n”,x # include "stdio 。

C语言数组编程题及解答

C语言数组编程题及解答

C语言数组编程题及解答【程序1】用筛选法求100之内的素数筛选法又称筛法,是求不超过自然数N(N>1)的所有质数的一种方法。

据说是古希腊的埃拉托斯特尼(Eratosthenes,约公元前274~194年)发明的,又称埃拉托斯特尼筛子。

具体做法是:先把N个自然数按次序排列起来。

1不是质数,也不是合数,要划去。

第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。

2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。

3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。

这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。

因为希腊人是把数写在涂腊的板上,每要划去一个数,就在上面记以小点,寻求质数的工作完毕后,这许多小点就像一个筛子,所以就把埃拉托斯特尼的方法叫做“埃拉托斯特尼筛”,简称“筛法”。

#include <stdio.h>#include <math.h>void main(){int i,j;int a[100];for(i=0;i<100;i++)a[i]=i+1;for(i=1;i<100;i++){if(a[i]==0)continue;for(j=i+1;j<100;j++)if(a[j]%a[i]==0)a[j]=0;}for(j=1;j<100;j++) //j从1开始,去除a[0](其值为1),因为1既不是质数,也不是合数if(a[j]!=0)printf("%d,",a[j]);printf("\n");}【程序2】题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。

例如6=1+2+3.编程找出1000以内的所有完数。

程序源代码:#include <stdio.h>int main(){int k[10];int i,j,n,s;for(j=2;j<1000;j++){n=-1;s=j;for(i=1;i<j;i++){if ((j%i)==0){n++;s=s-i;k[n]=i;}}if(s==0) //说明是完数{printf("%d is a wanshu:",j);for(i=0;i<=n;i++)printf("%d ",k[i]);printf("\n");}}return 1;}【程序3】题目:用选择法对10个数进行从大到小排序1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。

用筛法求出100以内的全部素数

用筛法求出100以内的全部素数

例6、用筛法求出100以内的全部素数,并按每行五个数显示。

【问题分析】⑴把2到100的自然数放入a[2]到a[100]中(所放入的数与下标号相同);⑵在数组元素中,以下标为序,按顺序找到未曾找过的最小素数minp,和它的位置p(即下标号);⑶从p+1开始,把凡是能被minp整除的各元素值从a数组中划去(筛掉),也就是给该元素值置0;⑷让p=p+1,重复执行第②、③步骤,直到minp>Trunc(sqrt(N)) 为止;⑸打印输出a数组中留下来、未被筛掉的各元素值,并按每行五个数显示。

用筛法求素数的过程示意如下(图中用下划线作删去标志):① 2 3 4 5 6 7 8 9 10 11 12 13 14 15…98 99 100 {置数}② 2 3 4 5 6 7 8 9 10 11 12 13 14 15…98 99 100 {筛去被2整除的数}③ 2 3 4 5 6 7 8 9 10 11 12 13 14 15…98 99 100 {筛去被3整除的数}……2 3 4 5 6 7 8 9 10 11 12 13 14 15…98 99 100 {筛去被整除的数}Program Exam53;const N=100;type xx=1 .. N; {自定义子界类型xx(类型名)}Var a: array[xx] of boolean; i,j: integer;BeginFillchar(a,sizeof(a),true);a[1] := False;for i:=2 to Trunc(sqrt(N)) doif a[I] thenfor j := 2 to N div I doa[I*j]:= False;t:=0;for i:=2 to N doif a[i] thenBeginwrite(a[ i ]:5); inc(t);if t mod 5=0 then writelnend;End.【例3】输入十个正整数,把这十个数按由大到小的顺序排列(将数据按一定顺序排列称为排序,排序的算法有很多,其中选择排序中的“简单选择排序”是一种较简单的方法)分析:要把十个数按从大到小顺序排列,则排完后,第一个数最大,第二个数次大,……;因此,我们第一步可将第一个数与其后的各个数依次比较,若发现,比它大的,则与之交换,比较结束后,则第一个数已是最大的数。

C语言程序设计[第三版]习试题库答案解析

C语言程序设计[第三版]习试题库答案解析

C 语言程序设计(第三版)习题库1、设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。

用scanf 输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。

请编程序。

#include <stdio.h>main(){float r,h,C1,Sa,Sb,Va,Vb;scanf(__”%f ”__,&r);scanf(”%d ”,__&h _);;C1=2*3.14*r;Sa=3.14*r*r;Sb=4*Sa;Va=4*3.14*r*r*r/3;Vb=Sa*h;printf(___”Cl=%.2fSa=%.2fSb=%.2fVa=%.2fVb=%.2f ”,Cl,Sa,Sb,Va,Vb );}2、输入一个华氏温度,要求输出摄氏温度。

公式为 c=5(F-32)/9输出要求有文字说明,取位2小数。

#include <stdio.h>main(){float F,c;scanf("%f",&F);____c=5*(F-32)/9______;printf("c=%.2f",c);}3、有一函数:⎪⎩⎪⎨⎧≥-<≤-<=10113101121x x x x x x y 写一程序,输入x 值,输出y 值。

#include <stdio.h>main(){int x,y;printf("输入x :");scanf("%d",&x);if(x<1) { /* x<1 */y=x;printf("x=%3d, y=x=%d\n",x,y);} else if (____x<10_______){ /* 1≤x -10 */_____y=2*x-1_______;printf("x=%3d, y=2*x-1=%d\n",x,y);} else{ /* x≥10 */y=3*x-11;printf("x=%3d, y=3*x-11=%d\n",x# include "stdio.h"main(){int x,y;scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10){ y=2*x-1;}else{ y=3*x-11;}printf("%d",y);}# include "stdio.h"main(){int x,y;scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10){ y=2*x-1;}else{ y=3*x-11;}printf("%d\n",y);}# include "stdio.h"main(){int x,y;scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10){ y=2*x-1;}else{ y=3*x-11;}printf("%d",y);}scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10){ y=2*x-1;}else{ y=3*x-11;}# include "stdio.h" main(){int x,y;scanf("%d",&x);if(x<1)y=x;else if(x>=1 && x<10)y=2*x-1;elsey=3*x-11;printf("%d",y);},y);}}4、给定一个不多于5位的正整数,要求:①求它是几位数;②按逆序打印出各位数字。

C语言程序设计(第三版)习题库答案

C语言程序设计(第三版)习题库答案

C语言程序设计(第三版)习题库答案C语言程序设计(第三版)习题库1、设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。

用scanf 输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。

请编程序。

#include <stdio.h>main(){float r,h,C1,Sa,Sb,Va,Vb;scanf(__”%f”__,&r);scanf(”%d”,__&h_);;C1=2*3.14*r;Sa=3.14*r*r;Sb=4*Sa;Va=4*3.14*r*r*r/3;Vb=Sa*h;printf(___”Cl=%.2fSa=%.2fSb=%.2fVa=% .2fVb=%.2f”,Cl,Sa,Sb,Va,Vb);}2、输入一个华氏温度,要求输出摄氏温度。

公式为c=5(F-32)/9输出要求有文字说明,取位2小数。

#include <stdio.h>main(){float F,c;scanf("%f",&F);____c=5*(F-32)/9______;printf("c=%.2f",c);}3、有一函数:⎪⎩⎪⎨⎧≥-<≤-<=10113101121x x x x x x y 写一程序,输入x值,输出y 值。

#include <stdio.h>main(){int x,y;printf("输入x :");scanf("%d",&x);if(x<1) { /* x<1 */y=x;printf("x=%3d,y=x=%d\n",x,y);} else if (____x<10_______){ /*1≤x -10 */_____y=2*x-1_______;printf("x=%3d,y=2*x-1=%d\n",x,y);} else{ /* x≥10 */ y=3*x-11;printf("x=%3d,y=3*x-11=%d\n",x# include "stdio.h"main(){int x,y;scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10){ y=2*x-1;}else{ y=3*x-11;}printf("%d",y);}# include "stdio.h"main(){int x,y;scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10) { y=2*x-1;}else{ y=3*x-11;}printf("%d\n",y);}# include "stdio.h" main(){int x,y;scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10) { y=2*x-1;}else{ y=3*x-11;}printf("%d",y);}scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10) { y=2*x-1;}else{ y=3*x-11;}# include "stdio.h"main(){int x,y;scanf("%d",&x);if(x<1)y=x;else if(x>=1 && x<10)y=2*x-1;elsey=3*x-11;printf("%d",y);},y);}}4、给定一个不多于5位的正整数,要求:①求它是几位数;②按逆序打印出各位数字。

C 使用筛选法求100以内的素数

C 使用筛选法求100以内的素数

C 使用筛选法求100以内的素数C++使用筛选法求100以内的素数,具体问题分析及其代码如下:【问题分析】我们可以把100个数看作是沙子和石子,素数是石子,非素数的是沙子,弄个筛子,将沙子筛掉,剩下的就是素数。

1至100这些自然数可以分为三类:(1) 单位数:仅有一个数1.(2) 素数:这个数大于1,且只有它本身和1这样两个正因数。

(3) 合数:除了1和他自身以外,还有其他的正因数。

【代码如下】/********************************************************/* 程序名:素数筛选/* 编程时间:2009年7月27日/* 主要功能:求素数*********************************************************/#include<iostream>using namespace std;//编译命令#include<math.h>const int MAX=100;//定义常量MAXint main()//主函数{int prime[MAX+100]={0};//定义变量并初始化int i,j,k=sqrt(MAX);for(i=2; i<=k; i++)//枚举筛数{if(prime[i]==0)//如果这个数没被筛,就看看{j=i*2;//将原数扩大二倍初始化给jdo{prime[j]=1;//将j筛掉j+=i; //再扩大一倍}while(j<=MAX);//直到最大}}for(i=2; i<=MAX; i++){if(prime[i]==0)//循环输出cout<<i<<" ";}cout<<endl;return 0;//主函数结束}【运行结果】。

【C语言】经典——判断100以内的素数

【C语言】经典——判断100以内的素数

【C语⾔】经典——判断100以内的素数
/*将100以内的素数⽤数组保存起来,再将数组⾥的值打印出来*/
#include <stdio.h>
int Pd_Ss(int i);
int main(){
int a[100] = {0}; //⽤于存储素数
int i = 0,k = 0; //⽤于循环的计数
printf("100以内的素数有:\r\n");
for(i = 2; i<=100 ;i++){ //判断2-100的所有数
if(Pd_Ss(i) == 1){ //调⽤函数判断如果函数返回1,则将i的值录⼊数组
a[k++]=i; //将素数存⼊数组
}
}
for(i = 0; i<k; i++){
printf("a[%d]=%d\r\n",i,a[i]); //输出素数
}
printf("\r\n"); //换⾏
return0;
}
int Pd_Ss(int i){ //判断素数的函数
int j;
for(j = 2;j * j <= i ; j++){
if(i % j == 0){ //如果取余为0,则返回0(退出函数)
return0;
}
}
return1; //返回1
}
备注:该程序代码⽐较基础,所有程序中的变量名⽐较随意
判断素数的函数(Pd_Ss)的思路:利⽤循环,判断 i 的值与 j 的平⽅,当 j 平⽅⼩于 i 时,进⼊循环,判断此时的 i 能否整除 j,如果能整除,说明 i 不是素数,返回0退出函数,否则返回 1;。

筛法--求1到100的所有素数

筛法--求1到100的所有素数

筛法--求1到100的所有素数⽤筛法求出100以内的全部素数,并按每⾏五个数显⽰我们知道⼀个合数可以分解了⼏个质数想乘,从2开始知道根号下n每次判断⼀个数是否为素数,如果为素数,就把所有能被这个数整除的数排除,即不是素数。

⾸先是⼀个判断素数的函数1bool sushu(int x)2 {3if (x==2)4return true;5for (int i = 2;i <= sqrt(x);i++)6 {7if (x%i==0)8return false;9 }10return true;11 }把能被素数整除得数排除1for (int i = 2;i <= sqrt(n);i++)2 {3if (sushu(i))4 {5for (int j= 2;j <= n/i;j++)6 {7 a[i*j]=false;8 }9 }10 }完整代码:1 #include <iostream>2 #include <cstdio>3 #include <cstring>4 #include <math.h>5 #include <algorithm>6 #include <iomanip>7using namespace std;8bool sushu(int x)9 {10if (x==2)11return true;12for (int i = 2;i <= sqrt(x);i++)13 {14if (x%i==0)15return false;16 }17return true;18 }19int main()20 {21int const n = 100;22bool a[10000];23 memset(a,true,sizeof(a));24 a[1]=false;25for (int i = 2;i <= sqrt(n);i++)26 {27if (sushu(i))28 {29for (int j= 2;j <= n/i;j++)30 {31 a[i*j]=false;32 }33 }34 }35int ans=0;36for(int i = 1;i <= n;i++) 37 {38if (a[i]){39 printf ("%-5d",i);40 ans++;41 }42if (ans==5)43 {44 ans=0;45 cout<<endl;46 }47 }48return0;49 }。

c语言经典案例

c语言经典案例

1、用筛选法求100之内的素数。

#include <stdio.h>void main(){int num[100],i,j;for (i=0;i<100;i++) num[i]=1;for (i=2;i<=10;i++)for (j=2;i*j<=100;j++) num[i*j-1]=0;printf("0至100内素数有:\n");for (i=j=0;i<100;i++)if (num[i]==1) {printf("%-4d",i+1);if (++j%4==0) printf("\n");}}2、用选择法对10个整数排序。

#include <stdio.h>void main(){int num[10],n,i,j,t,k;printf("请输入十个整数:");for (n=0;n<10;n++) scanf("%d",&num[n]);for (i=0;i<9;i++){k=i;for (j=i+1;j<10;j++)if (num[k]<num[j]) k=j;if (k!=i) {t=num[i];num[i]=num[k];num[k]=t;}}printf("从大到小排序为:");for (n=0;n<10;n++) printf("%d ",num[n]);}3、求一个3*3的整型二维数组对角线元素之和。

#include <stdio.h>void main(){int num[3][3],i,j;printf("输入二维数组:\n");for (i=0;i<3;i++)for (j=0;j<3;j++)scanf("%d",&num[i][j]);printf("两对角线和分别为%d 和%d\n",num[0][0]+num[1][1]+num[2][2],num[0][2]+num[1][1]+num[2][0]);}5、将一个数组中的值按逆序重新存放。

用筛法求出100以内的全部素数

用筛法求出100以内的全部素数

例6、用筛法求出100以内的全部素数,并按每行五个数显示。

【问题分析】⑴把2到100的自然数放入a[2]到a[100]中(所放入的数与下标号相同);⑵在数组元素中,以下标为序,按顺序找到未曾找过的最小素数minp,和它的位置p(即下标号);⑶从p+1开始,把凡是能被minp整除的各元素值从a数组中划去(筛掉),也就是给该元素值置0;⑷让p=p+1,重复执行第②、③步骤,直到minp>Trunc(sqrt(N)) 为止;⑸打印输出a数组中留下来、未被筛掉的各元素值,并按每行五个数显示。

用筛法求素数的过程示意如下(图中用下划线作删去标志):① 2 3 4 5 6 7 8 9 10 11 12 13 14 15…98 99 100 {置数}② 2 3 4 5 6 7 8 9 10 11 12 13 14 15…98 99 100 {筛去被2整除的数}③ 2 3 4 5 6 7 8 9 10 11 12 13 14 15…98 99 100 {筛去被3整除的数}……2 3 4 5 6 7 8 9 10 11 12 13 14 15…98 99 100 {筛去被整除的数}Program Exam53;const N=100;type xx=1 .. N; {自定义子界类型xx(类型名)}Var a: array[xx] of boolean; i,j: integer;BeginFillchar(a,sizeof(a),true);a[1] := False;for i:=2 to Trunc(sqrt(N)) doif a[I] thenfor j := 2 to N div I doa[I*j]:= False;t:=0;for i:=2 to N doif a[i] thenBeginwrite(a[ i ]:5); inc(t);if t mod 5=0 then writelnend;End.【例3】输入十个正整数,把这十个数按由大到小的顺序排列(将数据按一定顺序排列称为排序,排序的算法有很多,其中选择排序中的“简单选择排序”是一种较简单的方法)分析:要把十个数按从大到小顺序排列,则排完后,第一个数最大,第二个数次大,……;因此,我们第一步可将第一个数与其后的各个数依次比较,若发现,比它大的,则与之交换,比较结束后,则第一个数已是最大的数。

C语言程序设计-第三版-谭浩强主编第6—8章课后习题答案

C语言程序设计-第三版-谭浩强主编第6—8章课后习题答案

C语言程序设计-第三版-谭浩强主编第6—8章课后习题答案第六章循环语句6.1输入两个正数,求最大公约数和最小公倍数.#includevoidmain(){inta,b,num1,num2,temp;printf(\请输入两个正整数:\\n\canf(\if(num1temp=num1;num1=num2;num2=temp;}a=num1,b=num2;while(b!=0){temp=a%b;a=b;b=temp;}printf(\它们的最大公约数为:%d\\n\printf(\它们的最小公倍数为:%d\\n\}编译已通过6.2输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数.解:#includevoidmain(){charc;intletter=0,pace=0,degit=0,other=0;printf(\请输入一行字符:\\n\while((c=getchar())!='\\n'){if(c>='a'&&c<='z'||c>'A'&&c<='Z')letter++;eleif(c=='')pace++;eleif(c>='0'&&c<='9')digit++;eleother++;}printf(\其中:字母数=%d空格数=%d数字数=%d其它字符数=%d\\n\digit,other);}6.3求(n)=a+aa+aaa++aaa之值,其中a是一个数字,n表示a的位数。

解:voidmain(){inta,n,count=1,n=0,tn=0;printf(\请输入a和n的值:\\n\canf(\printf(\while(count<=n){tn=tn+a;n=n+tn;a=a某10;++count;}printf(\\\n\}6.4求(即1+2!+3!+4!++20!)voidmain(){floatn,=0,t=1;for(n=1;n<=20;n++){t=t某n;=+t;}printf(\\\n\}阶乘利用递归,再求和:#includeuingnamepacetd;longFunc(intn){ if(1==n)returnn;if(n>1)returnn某Func(n-1);}main(){long=0;inti=1;while(i<=6){=+Func(i);i++;}cout<6.5求voidmain(){intk,N1=100,N2=50,N3=10;float1=0.0,2=0.0,3=0.0;for(k=1;k<=N1;k++)/某计算1到100的和某/{1=1+k;}for(k=1;k<=N2;k++)/某计算1到50各数平方和某/{2=2+k某k;}for(k=1;k<=N3;k++)/某计算1到10各数倒数之和某/{3=3+1.0/k;}printf(\总和=%8.2f\\n\}已通过intmain(){intk=1,i=11,j=51;float=0.0;while(k<=10){=+k+k某k+1.0/k;while(k==10&&i<=50){=+i+i某i;while(i=50&&j<=100){ =+j;j++;}i++;}k++;}}6.6所谓“水仙开数”是指一个3位数,其个位数字立方和等于该数本身。

100-200的素数c语言

100-200的素数c语言

100-200的素数c语言我曾经遇到了一个非常有趣的问题:如何找出100到200之间的素数?素数是指除了1和自身以外没有其他因数的自然数。

我决定用C语言来解决这个问题,并将我的思路和代码分享给大家。

我们需要明确一点:素数只能被1和自身整除,因此我们可以通过遍历2到该数的平方根之间的所有自然数来判断一个数是否为素数。

如果在这个范围内找到了一个能整除该数的数,那么该数就不是素数。

接下来,我将介绍一种简单而高效的算法来找出100到200之间的素数。

请注意,为了遵守要求,我将不会在文章中插入任何计算公式或数学公式。

我们定义一个函数isPrime来判断一个数是否是素数。

该函数接受一个参数num,表示待判断的数。

我们将在函数内部实现上述的判断逻辑。

```c#include <stdio.h>int isPrime(int num) {if (num <= 1) {return 0;}for (int i = 2; i * i <= num; i++) {if (num % i == 0) {return 0;}}return 1;}int main() {int start = 100;int end = 200;printf("100到200之间的素数有:\n");for (int i = start; i <= end; i++) {if (isPrime(i)) {printf("%d ", i);}}return 0;}```上面的代码中,我们首先定义了一个isPrime函数来判断一个数是否是素数。

在主函数中,我们设置了起始数值start为100,终止数值end为200。

然后,我们使用一个for循环来遍历start到end 之间的所有数,并调用isPrime函数来判断每个数是否为素数。

如果是素数,则将其打印出来。

运行上述代码,我们会得到如下输出:```100到200之间的素数有:101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199```这些数字就是100到200之间的所有素数。

c++素数筛选法

c++素数筛选法

c++素数筛选法
素数(⼜称质数):指在⼤于⼀的⾃然数中,只能被1和它⾃⾝整除的⾃然数;
素数筛选法是指⼀种⾮常规的素数判定⽅法,⽐较⾼效率;
原理:任何数的整数倍必定不是素数,⼤于⼆的偶数必定不是素数。

我们以找出100以内的素数为例,利⽤原理,我们可以⾸先排除偶数是素数,然后进⼀步判断奇数
实现将偶数标记为0,素数标记为1;(也可以⽤⼀个bool数组将偶数标记为false,奇数标记为true)
下⾯是全部代码
#include <iostream>
#include <cmath>
#define MAX 100
using namespace std;
int main()
{
//设置标记,将偶数标记为0
int prime[MAX+1];
for(int i=1;i<=MAX;i++)
{
if(i%2==0)
{
prime[i]=0;
}
else prime[i]=1;
}
for(int i=3;i<=sqrt(MAX);i++)
{
if(prime[i]==1)
{
for(int j=i+i;j<=MAX;j=j+i)
{
prime[j]=0;
}
}
}
cout<<"2"<<" ";
for(int i=3;i<=MAX;i++)
{
if(prime[i]==1)
cout<<i<<" ";
}
return 0;
}。

C语言程序设计(第三版)习题库答案

C语言程序设计(第三版)习题库答案

C语言程序设计(第三版)习题库1、设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。

用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。

请编程序。

#include <stdio.h>main(){float r,h,C1,Sa,Sb,Va,Vb;scanf(__”%f”__,&r);scanf(”%d”,__&h_);;C1=2*3.14*r;Sa=3.14*r*r;Sb=4*Sa;Va=4*3.14*r*r*r/3;Vb=Sa*h;printf(___”Cl=%.2fSa=%.2fSb=%.2fVa=%.2fVb=%.2f”,Cl,Sa,Sb,Va,Vb);}2、输入一个华氏温度,要求输出摄氏温度。

公式为c=5(F-32)/9输出要求有文字说明,取位2小数。

#include <stdio.h>main(){float F,c;scanf("%f",&F);____c=5*(F-32)/9______;printf("c=%.2f",c);}3、有一函数:写一程序,输入x值,输出y值。

#include <stdio.h>main(){int x,y;printf("输入x:");scanf("%d",&x);if(x<1) { /* x<1 */y=x;printf("x=%3d, y=x=%d\n",x,y);} else if (____x<10_______){ /* 1≤x-10 */ _____y=2*x-1_______;printf("x=%3d, y=2*x-1=%d\n",x,y);} else{ /* x≥10 */y=3*x-11;printf("x=%3d, y=3*x-11=%d\n",x# include "stdio.h" main(){int x,y;scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10){ y=2*x-1;}else{ y=3*x-11;}printf("%d",y);}# include "stdio.h"main(){int x,y;scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10){ y=2*x-1;}else{ y=3*x-11;}printf("%d\n",y);}# include "stdio.h"main(){int x,y;scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10){ y=2*x-1;}else{ y=3*x-11;}printf("%d",y);}scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10){ y=2*x-1;}else{ y=3*x-11;}# include "stdio.h" main(){int x,y;scanf("%d",&x);if(x<1)y=x;else if(x>=1 && x<10)y=2*x-1;elsey=3*x-11;printf("%d",y);},y);}}4、给定一个不多于5位的正整数,要求:①求它是几位数;②按逆序打印出各位数字。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C 使用筛选法求100以内的素数
C++使用筛选法求100以内的素数,具体问题分析及其代码如下:
【问题分析】
我们可以把100个数看作是沙子和石子,素数是石子,非素数的是沙子,弄个筛子,将沙子筛掉,剩下的就是素数。

1至100这些自然数可以分为三类:
(1) 单位数:仅有一个数1.
(2) 素数:这个数大于1,且只有它本身和1这样两个正因数。

(3) 合数:除了1和他自身以外,还有其他的正因数。

【代码如下】
/********************************************************
/* 程序名:素数筛选
/* 编程时间:2009年7月27日
/* 主要功能:求素数
*********************************************************/
#include<iostream>
using namespace std;//编译命令
#include<math.h>
const int MAX=100;//定义常量MAX
int main()//主函数
{
int prime[MAX+100]={0};//定义变量并初始化
int i,j,k=sqrt(MAX);
for(i=2; i<=k; i++)//枚举筛数
{
if(prime[i]==0)//如果这个数没被筛,就看看
{
j=i*2;//将原数扩大二倍初始化给j
do
{
prime[j]=1;//将j筛掉
j+=i; //再扩大一倍
}
while(j<=MAX);//直到最大
}
}
for(i=2; i<=MAX; i++)
{
if(prime[i]==0)//循环输出
cout<<i<<" ";
}
cout<<endl;
return 0;//主函数结束
}
【运行结果】。

相关文档
最新文档