c语言求100以内素数

合集下载

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个进行比较,并进行交换。

C语言:输入一个数,输出比这个数小的所有素数,并求出个数。

C语言:输入一个数,输出比这个数小的所有素数,并求出个数。

C语⾔:输⼊⼀个数,输出⽐这个数⼩的所有素数,并求出个数。

//C语⾔:输⼊⼀个数,输出⽐这个数⼩的所有素数,并求出个数。

1 #include<conio.h>2 #include<stdio.h>3 #include<stdlib.h>4#define MAX 1005int fun(int lim, int aa[MAX])6 {7int i, j,k=0;8for (i = 2; i <= lim; i++)//罗列每个数9 {10for (j = 2; j < i; j++)//判断是否为质数(素数:只可以被1和本⾝整除,必须⼤于1)11 {12if (i%j == 0) break;13 }14if (j >= i) aa[k++] = i;15 }16return k;17 }18void main()19 {20 FILE *wf;21int limit,i,sum;22int aa[MAX];23 system("CLS");//清屏24 printf("输⼊⼀个整数:");25 scanf("%d",&limit);26 sum=fun(limit,aa);27for(i=0;i<sum;i++)28 {29if(i%10==0&&i!=0) /*每⾏输出10个数*/30 printf("\n ");31 printf("%5d ",aa[i]);32 }33/******************************/34 wf=fopen("out.dat","w");35 sum=fun(15,aa);36for(i=0;i<sum;i++)37 {38if(i%10==0&&i!=0) /*每⾏输出10个数*/39 fprintf(wf,"\n");40 fprintf(wf,"%5d ",aa[i]);//向⽂件中写⼊。

c语言求素数个数方法超时

c语言求素数个数方法超时

c语言求素数个数方法超时素数是只能被1和自身整除的正整数。

当我们要求解一个范围内素数的个数时,我们可以使用筛选法(Sieve of Eratosthenes)来优化算法,减少时间复杂度。

筛选法的基本思想是从2开始,将所有2的倍数标记为非素数,然后继续找到下一个未被标记为非素数的数,将其所有倍数标记为非素数。

重复该步骤直到最后一个数为止。

未被标记的数即为素数。

下面是使用筛选法求解素数个数的C语言代码示例:c#include <stdio.h>#include <stdbool.h>int countPrimes(int n) {bool *isPrime = malloc(sizeof(bool) * n); 创建用于存储数字是否为素数的数组int count = 0; 初始化素数个数为0初始化数组,假设所有数都是素数for (int i = 2; i < n; i++) {isPrime[i] = true;}筛选法核心步骤,将非素数标记为falsefor (int i = 2; i * i < n; i++) {当i是素数时,i的倍数都不可能是素数if (isPrime[i]) {for (int j = i * i; j < n; j += i) {isPrime[j] = false;}}}统计素数个数for (int i = 2; i < n; i++) {if (isPrime[i]) {count++;}}free(isPrime); 释放内存return count;}int main() {int n = 1000000; 所求范围int primeCount = countPrimes(n);printf("在%d范围内的素数个数为:%d\n", n, primeCount);return 0;}以上代码使用了动态内存分配来创建存储素数状态的数组,并在程序结束时释放内存,以防止内存泄漏。

C语言在线实验第5次(第七章函数)-题目与答案

C语言在线实验第5次(第七章函数)-题目与答案

第五次实验题目-第七章函数教学目标31.一元二次方程的系数:a、b、c由主函数输入,编写函数求方程的根。

#include <stdio.h>#include <math.h>void root(double a, double b, double c){ double delta,x1,x2,m,n;if (fabs(a) <= 1e-6){if (fabs(b) <= 1e-6)puts("Not an equation");elseprintf("x=%.2lf",-c/b);return;}else{delta=b*b - 4*a*c;m = -b / (2*a);n = sqrt(fabs(delta)) / (2*a);x1 = m + n;x2 = m - n;if (fabs(delta) <= 1e-6)printf("x1=%.2lf, x2=%.2lf", x1, x1);else if (delta < 0)printf("x1=%.2lf+%.2lfi, x2=%.2lf-%.2lfi",m,n,m,n);elseprintf("x1=%.2lf, x2=%.2lf", x1, x2);}}int main( ){ double a,b,c;scanf("%lf%lf%lf",&a,&b,&c);root(a,b,c);return 0;}教学目标32.输入一串字符,统计其中英文字母的个数,编写统计英文字母个数的函数。

#include<stdio.h>int numberOfLetter(char str[]) {int i=0;int num = 0;//统计字母个数while (str[i]!=’\0’) {if ((str[i]>='A'&& str[i]<='Z')||( str[i]>='a'&& str[i]<='z')) num++;i++;}return num;}int main( ) {char str[100];int letterNum;printf("Enter a string: ");gets(str);letterNum = numberOfLetter(str);printf("Number of letters is %d.\n", letterNum);return 0;}教学目标33. 求100以内所有素数的和。

C语言循环结构程序设计编程题

C语言循环结构程序设计编程题

实验3 循环结构程序设计一.实验目的:1.掌握使用while 语句,do-while 语句和for 语句实现循环的方法。

2.掌握在循环结构中使用break 与continue 语句的方法。

3.掌握多重循环的使用方法。

二.实验内容:1.编写程序输出半径为1到15的圆的面积,若面积在30到100之间则予以输出,否则,不予输出。

2.打印出所有“水仙花数”。

所谓“水仙花数”是指一个三位数,其各位数字的立方之和正好等于该数本身。

例如:153是一个“水仙花数”,因为153=13+53+33。

3.编写程序,分行输出斐波那契序列的前20项(每行5个数)。

说明:斐波那契序列:1,1,2,3,5,8,13,21,……4.编写程序,输出“九九乘法口诀表”。

5.编写程序,分行输出100以内所有的素数(每行5个数)。

6.有两个红球、三个黄球、四个白球,任意取五个球,其中必须有一个黄球,编程输出所有可能的方案。

7.编写程序求解sn=a+aa+…+a …a,其中a 是1-9中的一个数字。

n 为一正整数,a 和n 均从键盘输入。

(例如输入n 为4,a 为2,sn=2+22+222+2222)8.编程统计从键盘输入的字符中数字字符的个数,用换行符结束循环。

9. 编写程序,输出200以内所有能被7整除的数。

10. 编写程序,求1~1000之间能被13整除的最大的那个数。

11. 找出若干个非零数中的最小值m 以及它们的平均值a 。

要求:从键盘输入若干个数,每次输入一个赋给变量x ,x 为零时,结束输入。

12. 从键盘输入整数 n ,输出 1+3+5+7+……前 n 项的和。

(n<=100)13. 编写一个程序,求s=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值。

14. 编写一个程序,用户输入一个正整数,把它的各位数字前后颠倒一下,并输出颠倒后的结果。

15. 编写一个程序,求出200到300之间的数,且满足条件:它们三个数字之积为42,三个数字之和为12。

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、将一个数组中的值按逆序重新存放。

C语言(C++)程序代码(100)内含分析

C语言(C++)程序代码(100)内含分析

程序:素数1. [100,999]范围内同时满足以下两个条件的十进制数. ⑴其个位数字与十位数字之和除以10所得的余数是百位数字;⑵该数是素数; 求有多少个这样的数?15 #include<math.h> //头文件int prime(int x) //定义函数{int i,k;k=sqrt(x);for(i=2;i<=k;i++)if (x%i==0) break;if (i>k) return(1);else return(0);}main() //主函数{ int i,n=0,a,b,c;for(i=100;i<=999;i++){ a=i/100;b=i%100/10;c=i%10;if ((b+c)%10==a&&prime(i))n++;}printf("Total is:%d",n);}2. [300,800]范围内同时满足以下两个条件的十进制数. ⑴其个位数字与十位数字之和除以10所得的余数是百位数字;⑵该数是素数;求满足上述条件的最大的三位十进制数。

#include<math.h>int prime(int x){int i,k;k=sqrt(x);for(i=2;i<=k;i++)if(x%i==0) break;if(i>k) return(1);else return(0);}main(){int a,b,c,i,n=0;clrscr();for(i=800;i>=300;i--){ a=i/100;b=i%100/10;c=i%10;if((b+c)%10==a&&prime(i)) n++;if(n==1) break;}printf("%d",i);}3. 除1和它本身外,不能被其它整数整除的正整数称为素数(注:1不是素数,2是素数)。

c语言期末考试题库大题及详解答案

c语言期末考试题库大题及详解答案

c语言期末考试题库大题及详解答案1. 题目:编写一个C语言程序,实现一个简单的学生成绩管理系统,要求能够添加学生信息、查询学生信息、修改学生信息和删除学生信息。

答案:```c#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct {int id;char name[50];float score;} Student;Student students[100];int studentCount = 0;void addStudent(int id, char* name, float score) {if (studentCount < 100) {students[studentCount].id = id;strcpy(students[studentCount].name, name);students[studentCount].score = score;studentCount++;} else {printf("学生信息已满。

\n");}}void queryStudent(int id) {for (int i = 0; i < studentCount; i++) {if (students[i].id == id) {printf("学生ID:%d, 姓名:%s, 成绩:%.2f\n", students[i].id, students[i].name, students[i].score);return;}}printf("未找到该学生信息。

\n");}void modifyStudent(int id, char* name, float score) {for (int i = 0; i < studentCount; i++) {if (students[i].id == id) {strcpy(students[i].name, name);students[i].score = score;printf("学生信息已更新。

C语言程序设计经典必背程序

C语言程序设计经典必背程序

C语言程序设计典型编程必背1.计算机1-3+5-7+。

-99+101的值#include<stdio.h>main ( ){int i,t=1,s;s=0;for(i=1;i<=101;i+=2){ t=t*i; s=s+t;t=t>0?-1:1; }printf(“%d\n”,s);}2.输入一个十进制数,将他对应的二进制数的各位反序,形成新的十进制数输出。

11—1011—1101—13#include<stdio.h>main ( ){int n,x,t;printf(“shuruzhengshu:”);scanf(“%d”,&n);x=0;while(n!=0){ t=n%2; x=x*2+t;n=n/2; }printf(“xindezhengshu:%d\n,x”);}3.给出年月日,计算出该日是该年的第几天。

#include<stdio.h>main ( ){int year,month,day,days,i,d;printf(“shuru nian,yue,ri:”);scanf(“%d,%d,%d”,&year,&month,&day);days=0;for(i=1;i<month;i++){switch(i){case 1:case 3:case 5:case 7:case 8:case 10:case 12:d=31;break;case 4:case 6:case 9:case 11:d=30;break;case 2:if(year%4==0&&year%100!=0||year%400==0) d=29;else d=28;}days+=d;}printf(“%d nian %d yue %d ri shigainiande %d tian。

\n”,year,month,day,days+day);}4.求100——200间的素数。

C语言求质数

C语言求质数

【C语言】求解素数(质数)的N种境界★试除法:首先要介绍的,当然非"试除法"莫属。

"试除",顾名思义,就是不断地尝试能否整除。

比如要判断自然数x 是否质数,就不断尝试小于x 且大于1的自然数,只要有一个能整除,则x 是合数;否则,x 是素数。

显然,试除法是最容易想到的思路。

不客气地说,也是最平庸的思路。

不过呢,这个最平庸的思路,也有好多种境界。

不信请看下文:◎境界1假设要判断x 是否为质数,就从2 一直尝试到x-1。

这种做法,其效率应该是最差的1.#include<stdio.h>2.#include<Windows.h>3.int main()4.{5. int i = 0,k = 0;6. int count = 0;7. for(i=100; i<=200; i++)8. {9. for(k=2; k<i; k++)10. {11. if(i%k == 0)12. break;13. }14. if(k == i)15. printf("%d是素数\n",i);16. count++;17. }18. printf("\n%4d",count);19. system("pause");20. return 0;}◎境界2所有素数都是偶数,因此可以加快步长1.#include<stdio.h>2.#include<Windows.h>3.int main()4.{5. int i = 0, k = 0;6. int count = 0;7. for(i=101; i<=200; i+=2)8. {9. for(k=2; k<i; k++)10. {11. if(i%k == 0)12. break;13. }14. if(k==i)15. printf("%d是素数\n",i);16. count++;17. }18. printf("\n%4d",count);19. system("pause");20. return 0;21.}◎境界3除了2以外,所有可能的质因数都是奇数。

C语言求素数成绩算法

C语言求素数成绩算法

如何求素数1.自然数是0,1,2……2.素数是2,3,5……(不包括1的只能背1和它本身整除的自然数)【1】求10000以内的所有素数。

素数是除了1和它本身之外再不能被其他数整除的自然数。

由于找不到一个通项公式来表示所有的素数,所以对于数学家来说,素数一直是一个未解之谜。

像著名的哥德巴赫猜想、孪生素数猜想,几百年来不知吸引了世界上多少优秀的数学家。

尽管他们苦心钻研,呕心沥血,但至今仍然未见分晓。

自从有了计算机之后,人们借助于计算机的威力,已经找到了2216091以内的所有素数。

求素数的方法有很多种,最简单的方法是根据素数的定义来求。

对于一个自然数N,用大于1小于N的各个自然数都去除一下N,如果都除不尽,则N为素数,否则N为合数。

但是,如果用素数定义的方法来编制计算机程序,它的效率一定是非常低的,其中有许多地方都值得改进。

第一,对于一个自然数N,只要能被一个非1非自身的数整除,它就肯定不是素数,所以不必再用其他的数去除。

第二,对于N来说,只需用小于N的素数去除就可以了。

例如,如果N能被15整除,实际上就能被3和5整除,如果N不能被3和5整除,那么N也决不会被15整除。

第三,对于N来说,不必用从2到N一1的所有素数去除,只需用小于等于√N(根号N)的所有素数去除就可以了。

这一点可以用反证法来证明:如果N是合数,则一定存在大于1小于N的整数d1和d2,使得N=d1×d2。

如果d1和d2均大于√N,则有:N=d1×d2>√N×√N=N。

而这是不可能的,所以,d1和d2中必有一个小于或等于√N。

基于上述分析,设计算法如下:(1)用2,3,5,7逐个试除N的方法求出100以内的所有素数。

(2)用100以内的所有素数逐个试除的方法求出10000以内的素数。

首先,将2,3,5,7分别存放在a[1]、a[2]、a[3]、a[4]中,以后每求出一个素数,只要不大于100,就依次存放在A数组中的一个单元中。

c语言程序设计第五版课后答案谭浩强第六章习题答案

c语言程序设计第五版课后答案谭浩强第六章习题答案

c语⾔程序设计第五版课后答案谭浩强第六章习题答案第六章:利⽤数组处理批量数据1. ⽤筛选法求100之内的素数【答案解析】素数:约数为1和该数本⾝的数字称为素数,即质数筛选法:⼜称为筛法。

先把N个⾃然数按次序排列起来。

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

第⼆个数2是质数留下来,⽽把2后⾯所有能被2整除的数都划去。

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

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

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

因为希腊⼈是把数写在涂腊的板上,每要划去⼀个数,就在上⾯记以⼩点,寻求质数的⼯作完毕后,这许多⼩点就像⼀个筛⼦,所以就把埃拉托斯特尼的⽅法叫做“埃拉托斯特尼筛”,简称“筛法”。

(另⼀种解释是当时的数写在纸草上,每要划去⼀个数,就把这个数挖去,寻求质数的⼯作完毕后,这许多⼩洞就像⼀个筛⼦。

)【代码实现】//⽤筛选法求100以内的素数#include<stdio.h>int main(){int i, j, k = 0;// 将数组汇总每个元素设置为:1~100int a[100];for (i = 0; i < 100; i++)a[i] = i+1;// 因为1不是素数,把a[0]⽤0标记// 最后⼀个位置数字是100,100不是素数,因此循环可以少循环⼀次a[0] = 0;for (i = 0; i < 99; i++){// ⽤a[i]位置的数字去模i位置之后的所有数据// 如果能够整除则⼀定不是素数,该位置数据⽤0填充for (j = i + 1; j < 100; j++){if (a[i] != 0 && a[j] != 0){//把不是素数的都赋值为0if (a[j] % a[i] == 0)a[j] = 0;}}}printf(" 筛选法求出100以内的素数为:\n");for (i = 0; i < 100; i++){//数组中不为0的数即为素数if (a[i] != 0)printf("%3d", a[i]);}printf("\n");return 0;}【运⾏结果】2. ⽤选择法对10个整数排序【答案解析】选择排序原理:总共两个循环,外循环控制选择的趟数,内循环控制具体选择的⽅式。

求素数的c语言程序

求素数的c语言程序

求素数的c语言程序求素数的C语言程序一、简介在计算机编程中,求解素数是一个常见的问题。

素数,也称为质数,指的是除了1和自身之外没有其他因子的自然数。

求解素数的程序可以用不同的算法来实现,而C语言是一个常用的编程语言,可以很好地实现这个功能。

二、算法思路在本篇文档中,我们将介绍一个用C语言编写的求素数的算法。

该算法的思路是通过遍历从2开始的自然数序列,并判断每个数是否为素数。

如果一个数能除尽某个小于它的整数,则该数不是素数;如果一个数不能除尽任何小于它的整数,则该数是素数。

三、具体实现1. 头文件引入首先,我们需要引入所需的头文件。

在C语言中,我们可以通过include关键字引入一个或多个头文件,以获取所需的函数和变量声明。

```c#include <stdio.h>```2. 函数定义现在,我们需要定义一个用于判断素数的函数。

在C语言中,可以通过编写函数定义来实现特定功能。

下面是一个求解素数的函数定义:```cint isPrime(int n) {int i;for(i = 2; i <= n/2; ++i) {if(n % i == 0) {return 0;}}return 1;}```在上面的函数中,我们使用了一个for循环来遍历从2到n/2的整数。

如果n能被任何小于它的整数整除,那么它就不是素数,我们将返回0;否则,它就是素数,我们将返回1。

3. 主函数接下来,我们需要定义一个主函数,用于接收用户输入的数,并调用isPrime函数判断该数是否为素数。

下面是一个示例的主函数定义:```cint main() {int n, i, flag = 0;printf(\。

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