精华内容
下载资源
问答
  • 2021-06-13 22:41:36

     

    #include<stdio.h>
    int main()
    {
    int a,b,c,d;
    c=0;
    d=0;
    for(a=100;a<200;a++)
    {
    c=0;
    for(b=2;b<a;b++)
    {
    if(a%b0) c=1;
    }
    if(c0)
    {
    d++;
    }
    }
    printf("%d\n",d);
    for(a=100;a<200;a++)
    {
    c=0;
    for(b=2;b<a;b++)
    {
    if(a%b0)
    c=1;
    }
    if(c0) printf("%d ",a);
    }
    return 0;
    }

     

    更多相关内容
  • C语言输出素数表(1-100)&前100个

    万次阅读 多人点赞 2018-01-11 18:55:36
    本来是想第二篇做双链表的,今天看C和指针第四章,复习了以下之前做的素数输出,三种不同方法,结果如下: 1.输出1-100以内的素数: //这个比较简单,不多做介绍,唯一注意的一点是for循环截止条件是i(n),因为...

    本来是想第二篇做双链表的,今天看C和指针第四章,复习了以下之前做的素数输出,三种不同方法,结果如下:

    1.输出1-100以内的素数:

    //这个比较简单,不多做介绍,唯一注意的一点是for循环截止条件是i<sqrt(n),因为对于一个整数n,其是否为素数,在所有小于其平方根的数已经判断完毕,没必要再增加工作量判断到n-1;
    #include<stdio.h>
    #include<math.h>
    int main()
    {
    	int n;
    	int i;
    	int flag=0;
    	for(n=2;n<=100;n++)
    	{
    		flag=0;
    		for(i=2;i<=sqrt(n);i++)
    		{
    			if(n%i==0)
    				{
    					flag=1;
    					break;
    				}
    		}
    		if(flag==0)
    			printf("%d ",n);
    	}
    
    	return 0;
    }

    2.同样,也是输出1-100以内的素数,这个构造一个数组,将其所有元素初始化为1,表示素数,这时取x从2开始,到100以内做循环,若x为素数,即prime[x]!=0,使得每个i*x位置元素置0(prime[i*x]=0),表示为非素数,循环结束前x+1。

    #include<stdio.h>
    int main()
    {
    	int prime[100];
    	int i;
    	for(i=0;i<100;i++)
    		prime[i]=1;
    	int x=2;
    	while(x<100)   //是每一个数 x*i x=2->100 
    	{
    		for(i=2;i*x<100;i++)
    		{
    			if(prime[x])
    			{
    				prime[i*x]=0;
    			}
    		}
    		x++;
    	}
    	for(i=2;i<100;i++)
    	{
    		if(prime[i])
    			printf("%d ",i);
    	}
    	return 0;
    }


    3.该方法是输出100个素数,基本思想是构造一个素数表,利用函数判断每个数是否能被其之前的素数整除,如果不能,则在素数表内加上该元素,不断循环(while循环结束条件是cnt即数组个数>100)。

    #include<stdio.h>
    int isprime(int n,int prime[],int maxnumber);
    
    int main()
    {
    	int prime[100]={2,};	//构造素数表,共100个元素,初始化第一个为2,已知为素数;其余自动为0; 
    	int cnt=1;              //计数; 
    	//int count=0; 
    	int i=3;                //从3开始; 
    	while(cnt<=100)          //cnt是数组现有素数个数 
    	{
    		if(isprime(i,prime,cnt)) //判断i是否为素数 
    		{
    			prime[cnt++]=i;     //如果是记录到数组中,下标加1; 
    		}
    		i++;                    //下一个数 
    	}
    	
    	for(i=0;i<100;i++)
    	{
    		if(i%10==0 && i!=0)
    			putchar('\n');
    		printf("%5d",prime[i]);
    	}
    	
    	return 0;
    }
    
    int isprime(int n,int prime[],int maxnumber)
    {
    	int i;
    	for(i=0;i<maxnumber;i++)
    	{
    		if(n%prime[i]==0)    //判断能否被素数表中的数整除,如果能,则不是素数 
    			return 0;
    	}
    	
    	return 1;
    }




    展开全文
  • c语言输出素数之和

    2021-10-19 14:54:51
    输出格式: 在第一行中输出最大的10个素数,每个素数后面有个空格。在第二行中输出10个素数之和。 输入样例: [ea ①结尾无空行 输出样例: 499 491 487 479 467 463 461 457 449 443 5um= 4696 ①结尾无空行 sHoT8...
  • 详细讲解如何用C语言实现质数判断算法中最基础的一种——试除法

    这是我非常喜欢的一道编程题目。不要小看这道题,它看似简单,实则奥妙无穷。由于这是C语言的入门篇,只介绍最简单,也最容易想到的方法:试除法。但哪怕是试除法,也有不少变化。

    要想了解试除法,首先要知道什么是素数。简单来说(可能不太严谨,不过我们只重视思路):素数就是质数,也就是只能被1和本身整除的数。

    所以就诞生了判断素数最简单、最朴素的方法,假设要判断数i是不是素数,只需要拿2~(i-1)之间的数去试除i,如果其中有一个数被i整除,那么i就不是素数;反之,如果2~(i-1)之间的数都不能被i整除,就说明i是素数。

    比如说,判断7是不是素数,发现2,3,4,5,6都不能被7整除,得出结论:7是素数。或者判断,15是不是素数,发现2不能被15整除,但试到3发现可以被15整除,说明15是合数,不是素数。

    有了这些铺垫,就很容易做出下面这道编程题:

    打印100到200之间的素数,并统计个数

    完整代码如下:

    #include <stdio.h>
    
    //打印100~200之间的素数,并统计个数
    int main()
    {
    	int i = 0;
    	int count = 0;//统计个数
    	//产生100~200之间的整数
    	for (i = 100; i <= 200; i++)
    	{
    		int flag = 1;//假设i是素数
    		//判断i是不是素数
    		//拿2~i-1的数去试除i,如果整除就不是素数,如果都不整除就是素数
    		//产生2~i-1的数
    		int j = 0;
    		for (j = 2; j < i; j++)
    		{
    			if (i % j == 0)
    			{
    				flag = 0;//当i不是素数时把j改为0
    				break;
    			}
    		}
    		if (1 == flag)//由于i没有被改成0,说明i是素数
    		{
    			count++;
    			//输出素数
    			printf("%d ", i);
    		}
    	}
    	//输出个数
    	printf("\ncount = %d\n", count);
    
    	return 0;
    }

    这里先用for循环产生100~200之间的整数,然后产生2~(i-1)之间的数去试除i,如果整除就把flag置成0。当内层循环结束时,判断flag的值,如果是1,说明i没有被任何一个j整除,就说明i是素数;如果i是0,说明中间i被某一个j整除,从而说明i不是素数。

    一定要用flag来判断是不是素数吗?其实不用。稍稍修改一下代码,就能把flag去掉

    #include <stdio.h>
    
    //打印100~200之间的素数,并统计个数
    int main()
    {
    	int i = 0;
    	int count = 0;//统计个数
    	//产生100~200之间的整数
    	for (i = 100; i <= 200; i++)
    	{
    		//判断i是不是素数
    		//拿2~i-1的数去试除i,如果整除就不是素数,如果都不整除就是素数
    		//产生2~i-1的数
    		int j = 0;
    		for (j = 2; j < i; j++)
    		{
    			if (i % j == 0)
    			{
    				break;
    			}
    		}
    		if (i == j)//判断i是不是素数,如果2~(i-1)之间的数都不能被i整除,j则为i的值才跳出上面这个循环
    		{
    			count++;
    			//输出素数
    			printf("%d ", i);
    		}
    	}
    	//输出个数
    	printf("\ncount = %d\n", count);
    
    	return 0;
    }

    但是去掉flag后代码变得不那么好理解,所以我还是倾向于有flag的版本,接下来我们对有flag的版本做一些优化,提高代码的效率。

    首先,一个很容易想到的点是,所有的偶数都肯定不是素数,所以只需产生所有的奇数即可。

    #include <stdio.h>
    
    int main()
    {
    	int i = 0;
    	int count = 0;//统计个数
    	//产生100~200之间的整数
    	for (i = 101; i < 200; i += 2)//偶数肯定不是素数,所以只需产生100~200之间的奇数
    	{
    		int flag = 1;//假设i是素数
    		//判断i是不是素数
    		//拿2~i-1的数去试除i,如果整除就不是素数,如果都不整除就是素数
    		//产生2~i-1的数
    		int j = 0;
    		for (j = 2; j < i; j++)
    		{
    			if (i % j == 0)
    			{
    				flag = 0;//当i不是素数时把j改为0
    				break;
    			}
    		}
    		if (1 == flag)//由于i没有被改成0,说明i是素数
    		{
    			count++;
    			//输出素数
    			printf("%d ", i);
    		}
    	}
    	//输出个数
    	printf("\ncount = %d\n", count);
    
    	return 0;
    }

    接着就是重点了!首先存在下面这条定理(同样是不太严谨的表述,只是为了易于理解):如果一个数m能写成a*b的形式,那么a和b之中至少有一个数会小于或等于m的算术平方根!(定理1)

    举个例子:100=4*25=10*10

    当写成4*25时,4就比100的算术平方根(10)要小;当写成10*10时,两个因子都是10,都等于100的算术平方根(10)。

    证明很简单,用反证法,假设两个因子都比m的算术平方根大,那么它们的乘积也会比m大,这与它们的乘积等于m矛盾!所以假设不成立,也就是说,至少有一个因子小于或等于m。

    讲了一大堆,这根求解素数有什么关系呢?事实上,这个定理可以减少试除的次数!前面我们是用2~(i-1)的数去试除i,但其实只需要拿2~i的算术平方根的数去试除i就行了。

    有朋友又纳闷了:为啥呢?很简单,如果2~i的算术平方根之间的数有一个能被i整除,很自然就说明了i是合数,不是素数,这个很好理解。

    如果2~i的算术平方根之间的数都不能被i整除(命题1),那么i的算术平方根到(i-1)之间的数也不可能被i整除(命题2)。证明如下:仍然使用反证法,假设在满足命题1的前提下,命题2为假,也就是存在i的算术平方根到(i-1)之间的数能被i整除,也就是说,i能分解为两个整数的因子,那么根据定理1,就至少有一根因子介于2~i的算术平方根之间,也就是说,2~i的算术平方根之间的数一定至少存在一个数能被i整除,与命题1矛盾!所以假设不成立,也就是说,如果命题1成立,命题2一定成立!所以就不用把2~(i-1)之间的数全部试除一遍了,只需要拿2~i的算术平方根之间的数去试除就行了,大大节省了工作量。

    比方说,本来要判断101是不是素数,需要拿2~100之间的数去试除,但是现在只需要拿2~101的算术平方根(10点几)之间的数去试除,也就是拿2到10之间的数去试除,效果可想而知。而且,每判断一个数就可以节省这么多计算量,整体效率就大大提升了。

    优化后的代码如下:(有一个细节,上面这些只是理论上的论证,实际上由于我们已经从源头上去掉了所有的奇数,所以试除的数从3开始即可,无需从2开始)

    #include <stdio.h>
    #include <math.h>
    
    //打印100~200之间的素数,并统计个数
    int main()
    {
    	int i = 0;
    	int count = 0;//统计个数
    	//产生100~200之间的整数
    	for (i = 101; i < 200; i += 2)//偶数肯定不是素数,所以只需产生100~200之间的奇数
    	{
    		int flag = 1;//假设i是素数
    		//判断i是不是素数
    		//拿2~i-1的数去试除i,如果整除就不是素数,如果都不整除就是素数
    		//但是事实上只需要拿2~i的算术平方根之间的数去试除i
    		//产生2~i的算数平方根
    		int j = 0;
    		for (j = 3/*其实这里从3开始即可,因为源头上已经去除了所有的偶数*/; j <= sqrt(i); j++)//这里的sqrt是一个库函数,用于计算平方根,头文件是<math.h>
    		{
    			if (i % j == 0)
    			{
    				flag = 0;//当i不是素数时把j改为0
    				break;
    			}
    		}
    		if (1 == flag)//由于i没有被改成0,说明i是素数
    		{
    			count++;
    			//输出素数
    			printf("%d ", i);
    		}
    	}
    	//输出个数
    	printf("\ncount = %d\n", count);
    
    	return 0;
    }
    

    但是这段代码仍然有很大的优化空间。比方说,判断101是不是素数,真的需要拿2,3,4,5,6,7,8,9,10都去试除吗?显然无需这么麻烦。比如说4,6,8什么的就没必要了,也就是说,只需拿奇数去试除,偶数都不需要。继续修改代码

    #include <stdio.h>
    #include <math.h>
    
    //打印100~200之间的素数,并统计个数
    int main()
    {
    	int i = 0;
    	int count = 0;//统计个数
    	//产生100~200之间的整数
    	for (i = 101; i < 200; i += 2)//偶数肯定不是素数,所以只需产生100~200之间的奇数
    	{
    		int flag = 1;//假设i是素数
    		//判断i是不是素数
    		//拿2~i-1的数去试除i,如果整除就不是素数,如果都不整除就是素数
    		//但是事实上只需要拿2~i的算术平方根之间的数去试除i
    		//产生2~i的算数平方根
    		int j = 0;
    		for (j = 3/*其实这里从3开始即可,因为源头上已经去除了所有的偶数*/; j <= sqrt(i); j += 2/*这里偶数都不需要去试除*/)//这里的sqrt是一个库函数,用于计算平方根,头文件是<math.h>
    		{
    			if (i % j == 0)
    			{
    				flag = 0;//当i不是素数时把j改为0
    				break;
    			}
    		}
    		if (1 == flag)//由于i没有被改成0,说明i是素数
    		{
    			count++;
    			//输出素数
    			printf("%d ", i);
    		}
    	}
    	//输出个数
    	printf("\ncount = %d\n", count);
    
    	return 0;
    }
    

    但是本质上,如果把一个合数拆分成几个因子,是可以完全拆分成质数因子的,也就是说,只需要拿质数来试除就行了。但是这样的话,这段代码就要大幅度修改了。篇幅有限,再加上码字有点累了,就暂且到这里吧。

    最后说一下,试除法是质数判断方法中最简单、最基础同时效率也最低的一种方法,其他方法诸如筛选法,会从本质上大幅提升效率。这些我会在后面的博客中介绍。

    感谢你看到这里。麻烦给个免费的赞吧,谢啦。

    展开全文
  • = C语言判断一数是否为素数 = = = ========================================= 代码如下: #include main() { int n,i,k=2 ; i = 2 ; printf ("\n请输入一个大于“2”的数:") ; scanf ("%d",&...
  • 主要定义:素数又称质数,大于1,除了1和它自身外不能被其他正整数整除。 #include <stdio.h> //将1-100之间的素数质数)全部打印出来。 int main() { int i, j; for (i = 2; i <= 100; i++) { ...

    主要定义:素数又称质数,大于1,除了1和它自身外不能被其他正整数整除。

    #include <stdio.h>
    //将1-100之间的素数(质数)全部打印出来。
    int main() {
    	int i, j; 
    
    	for (i = 2; i <= 100; i++) {
    		if (i == 2)
    			printf("%d\n", i);
    
    		for (j = 2; j < i; j++) {
    			if (i % j == 0) {
    				break;
    			} else {
    				if (j == i - 1) {
    					printf("%d\n", i);
    				}
    			}
    		}
    
    	}
    
    	return 0;
    }

    展开全文
  • 2022年4月20日
  • 输出1-100之间的素数(3种方法)
  • C:素数(质数)的判断以及输出

    多人点赞 2022-04-16 21:59:16
    C语言素数(质数)的判断以及输出(附例题)
  • 如果一个梅森数是素数,则称其为梅森素数。例如22-1=3、23-1=7都是梅森素数。 当n=2,3,5,7时,Mn 都是素数,但n=11时,Mn=M11=211-1=2047=23X89,显然不是梅森素数。 1722年,瑞士数学大师欧拉证明了231-1=...
  • C语言 输出100以内的质数

    千次阅读 2021-08-22 14:51:29
    //定义存质数的表,p是素数表的下标 //因为1~100内,有一半偶数,一半奇数,偶数除2以外都不是质数,所以数组大小可定义为Max/2 int isPrime(int i){ //判断是否是质数函数 //唯一分解定理:任何一个大于1的自然数N,...
  • C语言输出可逆素数

    千次阅读 2020-03-16 20:40:47
    #include<stdio.h> #include<math.h> int main(){ int fun1(int); int fun2(int); int n,i,j; printf("请输入范围:"); scanf("%d",&n); for(i=2;i<=n;i++) if(fun1(i)){ ... if(...
  • 求101-200之间的素数; 初学C语言的时候写的程序,写的可能不是很好,但我觉得小白比较能接受,算法很简单。希望可以帮到正在看的你
  • C语言输出100内素数

    万次阅读 多人点赞 2021-12-12 09:47:42
    (1)输出100内的素数(易理解) (2)使用sqrt平方根函数输出 1.概念理解 素数:又称质数质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。 因数:指整数a除以整数b(b≠0) 的商正好是整数而...
  • 输出一个区间中所有的素数
  • 这样写为什么输出不了正确结果啊
  • C语言编写的输出素数

    2011-10-16 14:46:12
    C语言编写的输出素数程序 c语言初学者必会
  • C语言 输出100以内的素数,

    千次阅读 2021-05-22 00:48:27
    以下是引用学c在2007-11-7 17:45:56的发言:#include int main(void){int i,...1肯定是素数for(i=1;i<=100;i+=2){for(j=2;jif(i%j==0) break;if(i==j)printf("%d\n",i);}return 0;}时间复杂度高了---------------...
  • C语言素数判断及输出(1~100所有的素数

    千次阅读 多人点赞 2021-05-16 22:25:10
    C语言素数判断 我们要想解决素数问题首先要明确素数是什么。 文章目录C语言素数判断什么是素数如何计算素数素数源代码 什么是素数 素数素数一般指质数质数是指在大于1的自然数中,除了1和它本身以外不再有...
  • C语言-输出100以内的质数

    万次阅读 2020-09-18 14:52:00
    质数指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。 #include<stdio.h> int main() { int i,k; for(i=2;i<=100;i++) { int p=1; //用p来判断当前数是否是质数 ,p=1是...
  • 输出素数并统计个数--C语言

    千次阅读 2021-12-30 14:20:03
    C语言函数练习,PTA练习题
  • c语言求素数(c语言输出100以内素数)

    千次阅读 2021-05-20 01:07:42
    C语言 求100到300之间的素数C语言 #include "stdio.h" main() { int i,j; for(i=100;i;i++) { for(j=2;j 用C语言素数的问题如何编写程序简单易懂最好有注释要求简单啊 初学者能。 这是求1到100之间的素数的程序...
  • c语言素数(c语言输出100以内素数)

    千次阅读 2021-05-20 03:35:55
    楼上的还可以具体一些,其实非常简单,如果一个数是素数,只要判断他是否能被2到这个数的开方之间的数整除就行了。int flag=0; if(m==2){ //先判断是不是2 flag=1; } else.#include int main(){ int a=0; int num=0;...
  • C语言学习历程(三)素数输出

    千次阅读 2018-07-25 21:07:49
    输出100-200之间的素数,我们可以知道,条件就是将100-200之间的数拿出来,将他与2到其本身的每个数求余数,所以用内循环。然后每有一个余数为0,则定义标志位count++,然后检测标志位是否为0,若为0,则输出这个...
  • 题目:统计给定整数 M 和 N 区间内素数的个数并对它们求和。 #include <stdio.h> void Judge(int min, int max);//函数原型; int main() { int n = 0, sum = 0; int min, max; printf("Please input ...
  • c语言判断素数质数

    万次阅读 多人点赞 2020-12-20 20:31:42
    一、输入一个正整数并判断它是否为素数 1.素数是指大于1且只能被1和它本身整除的正整数,2是最小素数素数有无穷个; 2.如果整数x大于2,那么就判断x对2~(x-1)取余是否为0,如果是,肯定不是素数,如果都不是,则...
  • c语言输出2~100以内所有的素数

    千次阅读 2021-12-15 21:09:36
    c语言输出2~100以内所有的素数
  • C语言输出范围内所有素数

    千次阅读 2021-05-21 00:37:58
    C语言输出100之间的所有质数C语言输出100之间的所有质数。 各位。首先新建一个空白的c语言文件,引入头文件,头文件中包括math库,稍后会用到,建立主函数:主函数上面新建一个判断素数的函数isPrime,判断依据...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,692
精华内容 7,876
关键字:

c语言输出素数

友情链接: AJ_B1CAPRNGen.rar