c语言求100到200以内的素数
㈠ 用c语言输出100到200之间的素数
应该是对素数的定义没有理解吧。
素数,是定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
简而言之,素数就是只能被1和它自己相乘得到的数。所以,除了1和它自己之外,它对其它数取余数,结果都不是0。
同时,无论什么数,除了它自己之外,最大的因数肯定是它的一半,所以只需要查找到它的一半就可以了,不必从1查找到它自己。而且,这里是找素数,如果它的因数包括它自己的一半与数字2的话,那它也不会是素数了,所以查找的界限定为比如 i/2 是不会有遗漏的。
至于你的原来的代码里为什么是它自己开平方,我数学记得不多了,不是太清楚。
然后,就是根据定义去判断一个数是不是素数,那么,就必须让它与从2到它的一半的所有的数的余数都不为0,反应到代码里就是不仅仅要 “i % n != 0”,而且还要全部能除的数都除一遍,也就是“ n == k”,这个时候,才能确定这个数是素数了。
#include<stdio.h>
#include<math.h>
intmain()
{
inti,k,n,m=0;
for(i=101;i<=200;i=i+2)
{
k=i/2;//被除的数,小于等于它的一半
for(n=2;n<=k;n++)
{
if(i%n==0)
break;
elseif(n==k)//要把从2到k的数都除一遍才能确定
{
printf("%8d",i);
m++;
if(0==m%10)//把这个if输出换行放到elseif里面来,要不然后面会多很多空行
printf(" ");
}
}
}
printf(" ");
return0;
}
输出截图:
㈡ c语言求100-200之间的素数
思路:先定义一个函数isp用来判断一个数是否是素数,所谓素数是除了1和自身没有其他的因数,所以从2到该数减一,判断其是否可以整除该数,如果可以该数就不是素数,否则该数就是素数。最后从100到200依次判断并输出素数。
参考代码:
#include<stdio.h>
intfun(intn){
inti;
for(i=2;i<n;i++)
if(n%i==0)return0;
return1;
}
intmain()
{
inti;
for(i=100;i<=200;i++)
if(fun(i))
printf("%d",i);
return0;
}
/*
*/
㈢ C语言输出100-200之间的素数
逻辑错误,准确位置为14行,正确代码如下:
#include<stdio.h>
int main()
{
int i = 0;
for (i=100; i<=200; i++)
{
int j = 0;
for (j=2; j<=i-1; j++)
{
if (i%j == 0)
{
break;
}
}
if (j>=i)
{
printf("%d",i);
}
}
return 0;
}
(3)c语言求100到200以内的素数扩展阅读:
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。
质数的个数是无穷的。欧几里得的《几何原本》中有一个经典的证明。它使用了证明常用的方法:反证法。具体证明如下:假设质数只有有限的n个,从小到大依次排列为p1,p2,……,pn,设N=p1×p2×……×pn,那么,
要大于p1,p2,……,pn,所以它不在那些假设的素数集合中。
如果 为合数,因为任何一个合数都可以分解为几个素数的积;而N和N+1的最大公约数是1,所以不可能被p1,p2,……,pn整除,所以该合数分解得到的素因数肯定不在假设的素数集合中。因此无论该数是素数还是合数,都意味着在假设的有限个素数之外还存在着其他素数。所以原先的假设不成立。也就是说,素数有无穷多个。
其他数学家给出了一些不同的证明。欧拉利用黎曼函数证明了全部素数的倒数之和是发散的,恩斯特·库默的证明更为简洁,哈里·弗斯滕伯格则用拓扑学加以证明。
㈣ 输出100到200之间素数c语言
#include<stdio.h>
int main()
{
int i=0;
int count=0;
for(i=100;i<=200;i++)
{
int j=0;
for(j=2;j<=i;j++)
{
if(i%j==0)
{
break;
}
}
if(i==j)
{
count++;
printf("%d ",i);
}
}
printf("\ncount=%d\n",count);
return 0;
}
㈤ c语言 调用函数,输出100到200之间的所有素数
素数是只有1和自身才能整除的数。调用自定义的函数prime,对100~200间的奇数进行判断,是素数则输出。举例代码如下:
#include"stdio.h"
intprime(intn){//判断100~200间的数是否为素数
inti;
if(!(n&1))
return0;
for(i=3;i*i<=n;i+=2)
if(!(n%i))
return0;
return1;
}
intmain(intargc,char*argv[]){
intn;
for(n=101;n<200;n+=2)
if(prime(n))//调用prime判断n是否为素数
printf("%4d",n);//是则输出n
printf(" ");
return0;
}
㈥ 十万火急,C语言求100-200内素数
int
fun(int
lim,
int
aa[max])
{
/*
以下代码仅供参考
*/
int
i,j,k=0;
/*
其中变量k用于统计素数个数
*/
for(i=2;i<=lim;i++)
{
/*
以下找出小于或等于lim的素数存入aa数组中并统计素数个数
*/
for(j=2;
j<=i/2;
j++)
if(i%j==0)
break;
if(j>i/2)//i是素数
aa[k++]=i;
}
return
k;
}
㈦ C语言编程:求100到200之间素数的个数
#include<stdio.h>
main()
{
int i,k,n;
n=0;
for(i=100;i<=200;i++)
{
for(k=2;k<i;k++)
if(i%k==0)
break;
if(i==k)
printf("%d",i);/*打印素数*/
n++; /*累计素数个数*/
}
printf("n=%d",n);/*打印素数个数*/
}
命题1对于B=36N+1形数而言。
若不定方程(3N)^2+N-(B-1)/36=W^2有整数解,
则6(3N-W)+1是小因子数;6(3N+W)+1是大因子数。
若不定方程(3N)^2-N-(B-1)/36=W^2有整数解,
则6(3N-W)-1是小因子数;6(3N+W)-1是大因子数。
以上内容参考:网络-质数
㈧ C语言 求100到200之间的素数输出
bool
shs(const
int
A)
{//判断A是否为质数,是的话返回true.
if((A==2)||(A==3))
return
true;
if(A<=1)
return
false;
int
a;
for(a=2;a<=sqrt(A)+1;a++)
{
if(A%a
==
0)
return
false;
if(a
==
sqrt(A)+1)
return
true;
}
}
1不是素数,2和3是素数,如果一个整数A,能被2到根号下A之间的整数整除,那么A不是素数,反之A是素数。
㈨ 用c语言求100到200之间的全部素数
#include<stdio.h>
#include<math.h>
intmain(void)
{
intstaNum=100,endNum=200,sum=0;
inti,j,end;
for(i=staNum;i<=endNum;i++)
{
end=sqrt(i);
for(j=2;j<=end;j++)
if(i%j==0)
break;
if(j==end+1)
sum+=i;
}
printf("thesumis%d. ",sum);
return0;
}