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语言输出2~100的素数

c语言输出2~100的素数

c语⾔输出2~100的素数这个代码很巧妙,个⼈的理解都写在了注释⾥#include <stdio.h>#include <stdlib.h>#include <math.h>//相关的论⽂:[1]张景龙,黄静,王爱松等.素数判定算法的改进[J].河南科技学院学报(⾃然科学版),2013,(6):61-64.DOI:10.3969/j.issn.1008-7516.2013.06.015.//输出100以内的素数,思路://判断素数⽅法1://假如⾃然数N不是素数,则除1和其本⾝之外,必然⾄少存在两个数A和B,使得A*B=N,//则A和B中必有⼀个⼤于或者等于sqrt(N),另⼀个⼩于或者等于sqrt(N)。

下⾯是粗略证明//如果N是合数,则必有⼀个⼩于或者等于根号N的素因⼦.//因为任何合数都可表⽰为两个或者更多个素数之积.//假如N是合数且其素因⼦都⼤于根号N,那么将产⽣⽭盾:根号N*根号N>N.所以合数必有(⾄少)⼀个不⼤于根号N的素因⼦.//n的不⼤于根号的因⼦<=sqrt(n);n-1的不⼤于根号的因⼦<=sqrt(n-1),显然sqrt(n-1)<sqrt(n);//所以2~n内的⾃然数的因⼦范围是2~sqrt(n);换句话说2~sqrt(n)的倍数覆盖了了2~n范围内的合数//数组记录,初始化为0,判断为合数置为1,#define n 100int main(){int isPrim[n+1]={0};int i,j;//判断条件中⼀定是是i<=sqrt(n)//判断素数⽅法2//其中2-sqrt(n)(向下取整)是不是素数该咋判断://根据:判断⾃然数N是不是合数,就是看2~(N-1)之间有⽊有数能整除N,换句话说就是2~(N-1)之间有⽊有数的倍数是N。

//因为“2-sqrt(n)”中的数若是合数,它的因数肯定是在⽐⾃⼰⼩的数中产⽣,//由2判断了3是不是合数,由2,3判断了4是不是合数,//由2,3,4判断了5是不是合数,依次类推。

c语言素数个数求法

c语言素数个数求法

c语言素数个数求法素数,即质数,是指除了1和本身以外没有其他因数的自然数。

素数在数学上有着重要的地位和应用,如RSA公钥加密算法、密码学等。

本文将介绍如何使用c语言求出指定范围内的素数个数。

我们需要了解一个判断素数的基本方法,那就是试除法。

试除法是指用2到sqrt(n)之间的所有整数去除n,如果都不能整除,则n是素数。

因为如果n有一个大于1小于n的因数a,则必然有一个大于1小于等于sqrt(n)的因数b,使得a*b=n。

所以只需要判断2到sqrt(n)之间的数是否能整除n即可。

接下来,我们使用c语言实现求素数的算法。

首先,定义一个函数isPrime,判断一个数是否为素数。

代码如下:```cint isPrime(int n){if(n<=1) return 0; //1不是素数for(int i=2;i*i<=n;i++){if(n%i==0) return 0; //能整除说明不是素数}return 1; //是素数}```上述代码使用了试除法判断一个数是否为素数,时间复杂度为O(sqrt(n))。

接下来,我们定义一个函数countPrimes,用于统计指定范围内素数的个数。

代码如下:```cint countPrimes(int n){int count=0;for(int i=2;i<n;i++){if(isPrime(i)) count++; //如果是素数,计数器加1}return count;}```上述代码使用了isPrime函数判断每个数是否为素数,时间复杂度为O(n*sqrt(n))。

可以看出,这个算法并不是非常高效,当n很大时,计算时间会非常长。

可以采用一些优化方法来提高效率,如埃拉托色尼筛法、欧拉筛法等。

埃拉托色尼筛法是一种简单的素数筛法,其基本思想是从2开始,将每个素数的倍数都标记成合数,直到不能再标记为止。

代码如下:```cint countPrimes(int n){int count=0;int* isPrime=(int*)malloc(sizeof(int)*n);memset(isPrime,1,sizeof(int)*n);for(int i=2;i<n;i++){if(isPrime[i]){count++; //如果是素数,计数器加1for(int j=2*i;j<n;j+=i){isPrime[j]=0; //将i的倍数标记为合数}}}free(isPrime);return count;}```上述代码使用了动态分配内存的方式,将素数标记数组isPrime初始化为1,表示都是素数。

用函数求素数c语言

用函数求素数c语言

用函数求素数c语言一、题目概述本文将讲解如何使用函数求素数,主要使用C语言编写。

二、素数定义素数是指只能被1和自身整除的正整数。

例如,2、3、5、7等都是素数,而4、6、8等不是素数。

三、函数定义在本文中,我们将使用一个名为is_prime的函数来判断一个数字是否为素数。

该函数接受一个整数作为参数,并返回一个布尔值(true或false)来表示该数字是否为素数。

四、实现方法要判断一个数字是否为素数,我们可以遍历从2到该数字的所有整数,并检查它们是否能被该数字整除。

如果存在任何可以整除该数字的整数,则该数字不是素数。

否则,该数字是素数。

下面是is_prime函数的实现:bool is_prime(int num) {if (num <= 1) {return false;}for (int i = 2; i < num; i++) {if (num % i == 0) {return false;}}return true;}在这个函数中,我们首先检查输入的数字是否小于或等于1。

如果是,则它不是素数并返回false。

否则,我们遍历从2到num-1的所有整数,并检查它们是否可以被num整除。

如果存在任何可以被num整除的整数,则num不是素数并返回false。

否则,num是素数并返回true。

五、完整程序下面是一个完整的程序,它使用is_prime函数来打印从1到100之间的所有素数:#include <stdio.h>#include <stdbool.h>bool is_prime(int num);int main() {for (int i = 1; i <= 100; i++) {if (is_prime(i)) {printf("%d\n", i);}}return 0;}bool is_prime(int num) {if (num <= 1) {return false;}for (int i = 2; i < num; i++) {if (num % i == 0) {return false;}}return true;}在这个程序中,我们首先定义了is_prime函数。

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.引言2.最快方法:埃拉托斯特尼筛法(Sieve of Eratosthenes)3.算法原理4.C语言实现5.代码解析6.性能测试与优化7.结论正文:**引言**在计算机科学和编程领域,寻找素数是一种常见的任务。

素数是指大于1的自然数中,除了1和它本身以外,不能被其他自然数整除的数。

求解素数问题有助于理解数论、密码学等领域。

本文将介绍求解素数的最快方法——埃拉托斯特尼筛法(Sieve of Eratosthenes)及其C语言实现。

**最快方法:埃拉托斯特尼筛法(Sieve of Eratosthenes)**埃拉托斯特尼筛法是一种基于二维数组的算法,用于找出小于等于上限的素数。

该算法利用了素数的性质:如果一个数是素数,那么它的平方模小于等于上限的数也是素数。

通过不断标记数组中的素数,最终得到小于等于上限的素数。

**算法原理**1.创建一个二维数组,用于存储小于等于上限的数。

2.初始化数组中的所有元素为1,表示都是素数。

3.从2开始,遍历数组,将数组中的所有素数两两相乘,得到的结果大于上限的,将其对应的元素标记为0,表示该数不是素数。

4.重复步骤3,直到数组中的所有元素都被标记或遍历到上限。

**C语言实现**以下是一个简单的C语言实现:```c#include <stdio.h>#include <stdbool.h>void sieve_of_eratosthenes(int limit) {bool *prime = (bool *)malloc((limit + 1) * sizeof(bool));for (int i = 0; i <= limit; i++) {prime[i] = true;}for (int p = 2; p * p <= limit; p++) {if (prime[p]) {for (int i = p * p; i <= limit; i += p) {prime[i] = false;}}}for (int i = 2; i <= limit; i++) {if (prime[i]) {printf("%d ", i);}}free(prime);}int main() {int limit;printf("请输入一个上限:");scanf("%d", &limit);sieve_of_eratosthenes(limit);return 0;}```**代码解析**1.首先,我们需要一个布尔数组来存储小于等于上限的数是否为素数。

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语言素数怎么求

c语言素数怎么求1、打开viualC++6。

0,然后点击左上角的文件,然后点击新建。

2、然后在新弹出的对话框中点击C++源文件。

3、预处理命令和主函数输入新的文件文本框中,即函数头命令和空类型。

4、定义变量,然后输入一个数字,它是定义变量的数据类型,输出文本提示,然后输入数字。

5、然后,使用for函数和if函数来确定是否为质数。

质数:只能被1和它自己整除,比如17是质数,25不是质数,5显然除了1和25以外,5也可以被25整除,那么如何用C来判断?c语言判断质数。

此处使用循环结构,for语句,进入n,判断是否是质数。

intn,i;canf("%d",n);语篇判断质数。

for(i=2;i从2开始到n-1,也就是n不能被除1和本身之外的数。

语篇判断质数。

for(i=2;if(n%i==0);若能被2到n-1中的其中一数值除掉,那么break将启动,n不是质数。

语篇判断质数。

if(i>=n)printf("niprime");ele。

printf("ninotprime")当n是质数时,不符合第4步if条件,此时i=n。

当n不是质数时,n满足第4步if条件,此时i,[2,n-1]语篇判断质数。

全部代码。

#includevoidmain({intn,i;canf("%d",&n);for(i=2;if(n%i==0);if(i>=n)printf("niprime");ele。

printf("ninotprime");。

《C语言程序设计》复习题库(1)

《C语言程序设计》复习题库(1)

复习题库
当n=5时
93.有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它
插入到数组中。

94.将一个数组中的值按逆序重新存放。

例如,原来顺序为8,6,5,4,1。

要求
改为1,4,5,6,8
95.编程先输入某班10个学生某门课的成绩(成绩均为float型数据),
对全班10个学生成绩进行由高到低排序,并打印输出排序结果。

96.从键盘任意输入某班10个学生的成绩,输出最高分并统计出不及格
人数。

97.写一个判断素数的函数,在主函数输入一个整数,输出是否为素数的
信息
98.编写函数实现两个整型变量值的交换。

99.用递归调用的方法求n!,要求n由用户输入。

100.从键盘任意输入10个整数并放入一个数组,用函数编程实现将其中最大数与最小数的位置对换后,再输出调整后的数组。

101.写一个函数,使给定的一个3X3的二维整形数组转置,即行列互换102.写一个函数,将两个字符串连接
103.写一个函数,使输入的一个字符串按反序存放。

104.输入两个实数,用一个函数求出它们之和。

105.有一个一维数组score,内放10个学生成绩,写一个函数求平均成绩。

106.输出所得水仙花数,所谓水仙花数是指一个数3位数,其各各位数字立方和等于其本身, 例如: 153 = 1*1*1 + 3*3*3 + 5*5*5。

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)。
相关文档
最新文档