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;
}