‘壹’ c语言求100以内的质数
以我来看我觉得两个for循环都有问题。
首先第一个for循环应该错了。应该是i < 100。因为是求100以内的,所以要循环到100。
这个程序就是利用for循环让i从2遍历到99.然后利用j找出了1和本身之外i的因数。
那么第二个for循环问题就来了,我们寻找i的因数的时候,并不需要从2一直找到i本身,只要找到i的一半就可以停止了。举个简单例子,比如我们要找98的因数,那么我们只需要找到98÷2 = 49就行了,因为49之后的数字是肯定不能整除98的。同理大于i/2之后的数字是肯定不能够整除i的。所以第二个for的条件应该是j <= (i/2)而不是j。下面就简单了。如果j是i的因数,那么i%j=0. 就直接continue(顺便提一句这里是不能用break的,因为break是直接跳出了for循环,相当于直接结束了整个for循环,而此时还没有遍历到100的,应该用continue,continue就是结束当前循环并且执行i++继续下一轮循环)继续循环而不用执行print语句(这个时候代表i不是质数,因为除了1和它本身还有j这个因数。)。同理,如果从2到i/2都没有i的因数,那么就说明i没有其他因数,也就是质数了,所以print输出i。
另外补充一下:
i/j是求i除以j的商,比如11 / 3 = 3; 6 / 3 = 2
i%j是求i除以j的余,比如11 % 3 = 2; 6 % 3 = 0。
‘贰’ c语言 求100以内的质数有多少个
k = sqrt(x);
for (i = 2; i <= k;i++) {
if( x % i == 0) break;
}
if (i <= k) printf{"不是质数"},否则反之,中心思想理解了就好
‘叁’ 找出50-100之间的质数,并统计质数的个数。用c语言编程回答
#include<stdio.h>
#include<math.h>
void main()
{
int i,j,k;
int n=0;
for(i=50;i<=100;i++)
{
k=sqrt(i);
for(j=2;j<=k;j++)
if(i%j==0)
break;
if(j>=k+1)
{
printf("%d ",i);
n=n+1;
}
if(n%5==0)
{
printf("\n");
}
}
print("个数为%d",n) printf("\n");
}
‘肆’ 用C语言输出100之间的所有质数
1、首先新建一个空白的c语言文件,引入头文件,头文件中包括math库,稍后会用到,建立主函数:
‘伍’ C语言编程、求100以内所有质素数
楼主大括号都未能匹配,{有两个,}有三个,编译就通过不了的。
刚写了份代码,已调试通过,供楼主参考:
#include
<stdio.h>
main(void)
{
int
i,t;
for(i=1;
i<=100;
i++)
{
if(i
==
1)
continue;
if(i
==
2)
{
printf("%d,",i);
continue;
}
for(t=2;
t
<=
i/2;
t++)
{
if((i%t)
==
0)
break;
}
if(t
>
i/2)
{
printf("%d,",i);
}
}
printf("\n");
return
0;
}
输出的结果为:2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,
再说说楼主代码中一些错误:
1.之前提到编译上就不能通过。{和}个数未能匹配。
2.
if(100%i!=0)
break;
该语句的含义是100除以i的余数不等于0则跳出循环,当为1时,就已经跳出循环了。而且这对于质素的判断是毫无意义的,可以删除。
3.
for(t=1;t<=i;t++)
质数的判断的话,t应该是从2开始计数的,否则i%1肯定是等于0的。应修改为for(t=2;
t<=i;
t++)。此外,这里可以参考我的代码,t<=i/2即可,用以提高提升效率。
希望对楼主有所帮助。谢谢。
‘陆’ C语言求100内质数
break只能跳出最内层循环4%2=o那不是跳出了for(j=2;j<i;j++),但没有跳过printf("%d
",i);所以还是输出了
解决方法有二:
1、改用goto(危险)
#include<stdio.h>
intmain()//嗯,经过我手修改的代码都要加上int
{
inti,j;
for(i=2;i<=100;i++)
{
for(j=2;j<i;j++)
if(i%j==0)gotoskip;//直接跳到skip标签,跳过printf
printf("%d ",i);
skip:
}
return0;
}
2、设置标识符
#include<stdio.h>
intmain()
{
inti,j;
intflag;//增加一个标识符变量
for(i=2;i<=100;i++)
{
flag=0;//重置标识符
for(j=2;j<i;j++)
if(i%j==0){
flag=1;//设置标识符,表示发现这个数是合数
break;
}
if(flag==0)printf("%d ",i);//标识符保持0表示刚才循环中没有发现这个数是合数
}
return0;
}
‘柒’ 输出50到100所有质数的c语言编程
#include<stdio.h>
boolis_prime(intn)
{
if(n<2)
returnfalse;
for(inti=2;i*i<=n;i++)
{
if(n%i==0)
returnfalse;
}
returntrue;
}
intmain()
{
for(inti=50;i<=100;i++)
{
//如果是质数,则打印
if(is_prime(i))
{
printf("%d",i);
}
}
return0;
}
‘捌’ c语言求100以内的素数
#include<stdio.h>
//输出100之内的所有素数
int main()
{
int i;
int j;
int flag = 1;
for(i = 2;i <= 100;i++)
{
for(j = 2;j <= i / 2;j++)
{
if(i % j ==0)
{
flag = 0;
break;
}
}
if(flag == 1)
{
printf("%d ",i);
}
flag = 1;
}
return 0;
}
C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言;
质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除。
‘玖’ C语言编程 找出50到100的质数 并统计质数个数
/* Function to find <strong class="highlight">prime</strong> <strong class="highlight">number</strong> if so return 1 else return 0 */
#include<stdio.h>
#include<math.h>
int isprime( int num )
{
int i ;
int sq = ( int )sqrt( num );
/* here check should be done for num = 0 and 1 other wise 0 and 1 are printed as primes */
/* if ( num <= 1) return 0; */
for ( i = 2 ; i <= sq ; i++ )
{
if ( num % i == 0 )
{
break ;
}
}
if ( i <= sq )
return 0;
else
return 1 ;
}
int main(void)
{
int pnPrimeList[100]={0};
int ntotal = 0;
for(int i=50;i<=100;i++)
{
if(1==isprime(i))
{
pnPrimeList[ntotal]=i;
ntotal++;
}
}
for(int j=0;j<ntotal;j++)
{
printf("%d ", pnPrimeList[j]);
}
printf("\ntotal number = %d\n",ntotal);
return 0;
}
‘拾’ c语言 求50内的素数
if(i>n)
是针对for(i=2;i<=n;i++)
i<=n条件结束判断的
如果m不是素数,那么将执行
if(m%i==0)
break;
这样,i还没到n就结束循环了。
如果m是素数,i一直到n+1才跳出循环,所以只有i>n情况下,才能正确判断是否为素数