Ⅰ c语言,怎样判断一个数是否是质数,用循环语句拜托
#include<stdio.h>
#include<math.h>
intcheck(intn)
{
inti,k=1;
floatm=sqrt((float)n);
for(i=2;i<=(int)m;i++)
if(n%i==0){k=0;break;}
returnk;
}
intmain()
{
intn,j;
printf_s("请输入一个正整数:");
scanf_s("%d",&n);
j=check(n);
if(j==0)
printf_s(" %d不是素数。 ",n);
else
printf_s(" %d是素数。 ",n);
system("pause");
return0;
}
Ⅱ C语言中用for循环程序编写: 输入一个数判断它是否是质数
#include"stdio.h"
intmain()
{
intn,i,flag=0;
scanf("%d",&n);
if(n<=1)
{
printf("输入的数不是质数! ");
return0;
}
for(i=2;i<=n/2;i++)
{
if(n%i==0)
{
flag=1;
break;
}
}
if(flag==1)
printf("输入的数不是质数! ");
else
printf("输入的数是质数! ");
return0;
}
Ⅲ C语言判断质数,for语句里一个条件看不懂
看到提问者,迟迟没有采纳别人的答案,我就来答一下,因为其他人虽然说了,但是楼主可能没有明白是为什么。。。我专门详细的给你讲解一下吧。。。
首先,直接写i<n,是可以的,但是效率太低。假设,我输入的数n是100,那么显而易见,for循环需要做一百次,貌似没差哦,因为电脑的运行速度是很快的,可能几秒钟就做完100次for循环了。但是要是我输入的100000,十万呢?那么意味着,需要做10万次for循环,这个时候,计算机可能需要几十秒,感觉还是很快是吧,不差那几十秒对吧,那我们如果输入更大的数,10亿呢?可能就需要一分钟了,因为计算机虽然算的快,但是不意味着瞬间就能完成啊。所以那怎么办呢?我们需要对程序进行优化,即采用算法,从而提高效率和运行速度,这就是计算机专业的基本课程要求了,我就不细讲了。主要讲一下,这个程序,为什么要这么做。
首先,我知道,我们需要提高for循环的效率,从而尽可能的让for循环的次数少,从而减少时间,提高运行效率,那么我们应该怎么提高呢。假设,我们现在还输入数n为100,i<n,需要100次,那么我需要减少运行次数,所以我们需要先分析一下,怎么减少,比如i<n,当n=100的时候,我们需要100次,提高效率,那么我就要把上限n减小。当我输入n=100,是先从i=2开始做的对吧,这个时候100/2,结果是50对吧,那么请问50以上的数我还需要做吗?没必要对吧,因为100/60,结果已经小于2了,而我们的i是从2开始一直往上加的正整数,50以上的数明显小于2,做第一遍的时候,不符合,那么50上面的数一定不符合了啊对吧,这个时候,我们就可以写for(i=2;i<n/2;i++),这样效率就提高一半了,原来要从2做到100,现在只要做到50,而且我们也已经知道了,为什么50以上的数不需要做了,效率提高了将近一半,但是效率依然可以继续提高,就像你那个程序一样,那么当i=3的时候呢?100/3=33.33,取整就是33,就算向上取整,也才34,那么意味着,如果这个数能被3整除,那么34-100的数就不需要去做了,因为如果能被3整数,那么33以上的数肯定有一个能被整除,而3都不能整除的话,那么34以上的数一定找不到能被整除的数了,所以我们会发现i每次增加1了之后,我们要寻找的数的上线就被降低了,根本不需要做到这个数为止,那么极限数是什么呢?很简单,当i增大了,我们的上线就减少了,最后的上限的极限在哪里呢?上限的极限就在100/i=i,为啥呢?因为i的平方数等于100,也就是意味着i*i=100,如果能被整除,那么i就是唯一的整除的数,如果i不是,那么就一定没有,因为i如果继续增加,那么另外一个能被整除的数一定小于i,但是小于i的正整数,我们已经全部做过了啊。所以当i*i=100,都没有结果的时候,根本不需要再往上做了,如果在小于i的范围内,有一个数能被整除,那么这个数是质数还是素数,我们就已经很清楚了吧,就不需要再去做了,除非你的程序,是要把所有能被整除的数都找出来。
所以,其实那只是一个算法而已,目的,只是在于提高效率。而i<n可以,但是效率略低,而且当输入的数越大,效率越低,找出答案的时间越长,不信你可以输入一个超级大的数,黑框的控制台,就不会马上出结果,超级大的数,你甚至还会以为程序卡主了,其实是程序没做完而已。。。没巴拉算法之前,我写程序也是暴力群举的,简单小程序,确实够用了,大程序,是行不通的,一定是需要算法辅助的。。。
我说了这么多,应该已经比他们详细明了了吧,自己去算算,就知道了,要尽可能的把上限缩小,如果只是初学者,不用关心这个,先把C语言的程序语法,标准语句搞清楚,会用,没有BUG就行了。。。
Ⅳ c语言关于用for循环求素数
#include#include
main()
{
int i,j;
for(i=2;i<100;i++ ) {
for (j=2;j<=(i/2);j++)
if (i%j==0) break;
if (i%j!=0) printf("%d\t",i);
}
printf("\n");
}
#include#include
main()
{
int i,j;
for(i=2;i<100;i++ ) {
for (j=2;j<=(i/2);j++) {
if (i%j==0) break;
if (i%j!=0) printf("%d\t",i);
}
}
printf("\n");
}
这俩根本不是一回事啊= =没加那对大括号,第二句if就是大循环里面的,加了以后就是小循环里面的了。
第一个程序,小循环:
for (j=2;j<=(i/2);j++)
if (i%j==0) break;
意思是说,从2一直到i/2,但凡出现能整除的就跳出小循环,否则就一直循环到i/2为止
Ⅳ 求大神,c语言怎么用for循环语句输出1到100的所有质数,我这么做结果出来的是2到100的所有数
for(a=2;a<=100;a++)
{
for(i=2,t=0;i<a;i++)
{
if(a%i==0)
{
t=1;
break;
}
}
if(t==0)
{
cout<<a<<"";
}
}
Ⅵ c语言 质数 循环
#include<stdio.h>
main()
{
intnumber;
intdivisor;
printf("2 ");//最小的质数是2
for(number=3;number<=100;number=number+2)
{
for(divisor=3;divisor<number;divisor=divisor+2)
{
if(number%divisor==0)//表示number有因数,提前结束本次循环,这时divisor会小于number
break;
}
if(divisor>=number)//如果不是质数,divisor会小于number,因此,判断不小于number就可以知道是不是质数了。
printf("%d ",number);
}
}
Ⅶ C语言求质数
红框里的代码,加上那个i++的for循环,其逻辑是:
从2开始,遍历所有小于n的整数,
只要存在一个整数可以被n整除(即余数为0),则可判断n为合数.
若从2到n-1范围内,不存在可整除n的数,则判断n为质数.
还有 for(int .......)这种定义变量的写法,要C99才支持,现在很多编译器默认C89标准,或者不支持C99标准,这样写容易出错.
第一个for循环里面,直接把n=0,1,2的情况跳过了.既然这样,变量n直接把初值赋为3不就好了,赋值0干嘛.
第二个for循环里面,判断到i<sqrt(n)就可以了,还有更简单的求质数算法,感兴趣可以网络.
Ⅷ c语言求素数的办法只需解题思路
/*求素数的三种方法
一:for(i=2;i<=(n-1);i++)
if(n%i==0)i在2到n-1之间任取一个数,如果n能被整除则不是素数,否则就是素数
二:for(i=2;i<n/2;i++)
if(n%i==0) /*i在2到n/2之间任取一个数,如果n能被整除则不是素数,否则就是素数
三:for(i=2;i<(n=sqrt(n));i++)
if(n%i==0) /*i在2到sqrt(n)之间任取一个数,如果n能被整除则不是素数,否则就是素数,在下省了下面的输出步骤*/
/*在本程序中使用第三种方法来求解*/
#include <stdio.h>
#include <math.h>
int main(void)
{
int i; /*外循环*/
int j; /*内循环*/
int flag; /*素数标志,flag为1则此数为素数*/
flag = 0;
//int n;
i = 2;
while( i <= 100)
{
j = 2;
flag = 1; /*假设此数为素数*/
while(j <= (int) sqrt(float(i)))
{
if(0 == (i %j))
flag = 0; /*根据第三种算法可知次数不为素数*/
j ++;
}
if(flag)
printf("%d\t",i);
i++;
}
printf("\n");
return 0;
}
Ⅸ C语言for循环判断素数
质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数。比1大但不是素数的数称为合数。1和0既非素数也非合数。
假设循环为for
(i=2;i<=x;i++)如果输入x=7,i=2,2<7,然后i+1为3,之后一直执行到i=7,
7<=7可以执行,i7%7==0直接执行break退出循环,执行下一句,此时i不再加一(已退出循环),所以i<=x这样也是可以的。当然如果是for
(i=2;i<=x-1;i++)也是可以的,这个就不解释了。
之所以用i
<=x-1,因为这是一般人的想法,比较通俗易懂。i<=x这个就不好想了
Ⅹ 嵌套for语句求质数
两个for循环,最外层的for循环,指定i的值
然后这个i的值确定后,就开始执行里面的for循环,
里面的这个for循环,指定j的值。
在变更j的值的过程中,用if语句来判断是否满足整除性。