c語言1到100的素數
1. 用c語言編1到100之間的素數程序
//1.程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,則表明此數不是素數,反之是素數。
//2.程序源代碼:
#include
"stdio.h"
#include
"math.h"
main()
{
int
m,i,k,h=0,leap=1;
printf("\n");
for(m=1;m<=100;m++)
{
k=sqrt(m+1);
for(i=2;i<=k;i++)
if(m%i==0)
{
leap=0;break;
}
if(leap)
{
printf("%-4d",m);
h++;
if(h%10==0)
printf("\n");
}
leap=1;
}
printf("\nthe
total
is
%d",h);
return
0;
}
2. c語言求1到100的素數
這題用數組做挺復雜的,首先你要把1到100的數放進去吧,然後還要用數組下標輸出,很麻煩。
可以用簡單的方法你參考下:(判斷一個數是不是質數,把這個數與2和它自己(包括)之間的數相除,如果有能整除且不是自己則不是質數,如果是自身則是質數)你的思路是開平方根我們思路是相同的只是運用的數學原理不同而已。
int main()
{int i=0;int j=0;
for(i=2;i<100;i++)
{for(j=2;j<=i;j++)
{ if(i%j==0);
if(i==j)
printf("%8d",i)
}
}
}
3. 用c語言:輸出在1~100內的所有素數
#include<stdio.h>
#include<math.h>
intmain()
{
intn;
inti;
intflag=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);
}
return0;
}
(3)c語言1到100的素數擴展閱讀
C語言判斷素數
#include<stdio.h>
intmain()
{
inti,j;
intm,n,p;
for(i=11;i<1000;i++)
{
if(i>=11&&i<=99)
{
m=i%10;
n=i/10;
}
else
{
m=i/100;
n=i%10;
}
if(m==n)
{
for(j=2;j<i/2;j++)
if(i%j==0)
break;
if(j>=i/2)
{
printf("%d",i);
}
}
}
return0;
}
4. C語言求1到100的素數
除了2,所有素數都是奇數,所以只考查>2的奇數;奇數肯定不能被偶數盡除,所以除數也只用奇數,且用j*j<=i這種形式控制循環,避免開方計算。
//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
intmain(void){
inti,j,k;
printf(": 2");
for(i=3;i<100;i+=2){//除了2隻考查奇數,避免窮舉
for(j=3;(k=j*j)<=i;j+=2)//只用奇數去除,且j*j<=i限制循環以提高時效
if(i%j==0)break;
if(k>i)
printf("%d",i);
}
printf(" ");
return0;
}
5. c語言編1到100素數
沒錯,它是,只不過不太好理解
j是從2開始從小到大枚舉的,也就是說j一定是i最小的因數
比如,99最小的因數是3,那麼當i=99時,j=3
一個合數最小的因數(1除外)的平方必定小於這個數
例如:99最小的因數是3,3*3<99
9最小的因數是3,3*3=9
7最小的因數就是7,7*7>7,所以7是質數
不知你明白沒有
不過這個if(j*j>i)確實不太好理解,建議改成if(j==i),效果完全一樣
6. 用C語言編1到100之間的素數程序
程序及解釋如下:
首先判斷素數的演算法:用一個數分別去除以2到sqrt(這個數),如果能被整除, 則表明此數不是素數,反之是素數。
則有如下程序
{ int m,k,i;
for(m=1;m<=100;m=m+2) //m=m+2,因為偶數都不是素數,不用考慮,所以每次m+2.
{ k=sqrt(m) //先求這個數的平方跟
for(i=2;i<=k;i++) //然後用i(從2到k,即m的平方跟)去除m,
if(m%i==0) break; //如果能被整除, 則不是素數,break
if(i>=k+1) pritnf("%d",m); //如果i>k+1,則說明沒有數能整除m.則m是素數
}
}
(6)c語言1到100的素數擴展閱讀:
素數被利用在密碼學上,所謂的公鑰就是將想要傳遞的信息在編碼時加入質數,編碼之後傳送給收信人,任何人收到此信息後,若沒有此收信人所擁有的密鑰,則解密的過程中(實為尋找素數的過程),將會因為找質數的過程(分解質因數)過久,使即使取得信息也會無意義。
在汽車變速箱齒輪的設計上,相鄰的兩個大小齒輪齒數設計成質數,以增加兩齒輪內兩個相同的齒相遇嚙合次數的最小公倍數,可增強耐用度減少故障。
在害蟲的生物生長周期與殺蟲劑使用之間的關繫上,殺蟲劑的質數次數的使用也得到了證明。實驗表明,質數次數地使用殺蟲劑是最合理的:都是使用在害蟲繁殖的高潮期,而且害蟲很難產生抗葯性。
以質數形式無規律變化的導彈和魚雷可以使敵人不易攔截。
多數生物的生命周期也是質數(單位為年),這樣可以最大程度地減少碰見天敵的機會。
參考資料:網路 素數
7. 用c語言編寫程序輸出1-100內的素數
用常規的判素性方法可如下實現
#include "stdio.h"
#include "math.h"
bool IsPrime(int x)
{
int i, s;
s = sqrt(x + 1);
for(i = 2; i <= s; i++)
if(x % i == 0) return false;
return true;
}
void main( )
{
int i;
for(i = 2; i < 100; i++)
if(IsPrime(i))
printf("%d ", i);
}
也可採用篩選法,篩選法效率會高一些,樓上的雖然也是篩選法,但他的效率卻並不高。篩選法的思路是將那些非素數篩掉,留下那些素數。命題「對於1<x<100的合數x, 必含有小於10的質因子」可以證明是真命題,它的逆反命題「對於1<x<100的數,如果不含有小於10的質因子,則它必為素數。」則也是真命題。因此篩除時,只要篩除含有10以內的質因子的數就可以了。下面給出篩選法的代碼。
#include "stdio.h"
void main( )
{
bool isprime[100];
int i, j;
isprime[0] = false;
isprime[1] = false;
for(i = 2; i < 100; i++) /*先初始化2~100的都是素數,然後將非素數篩除掉*/
isprime[i] = true;
for(i = 2; i < 10; i++) /*將所有含有小於10的質因子的數篩除掉*/
{
if(isprime[i]) /*如果i是素數,則將它的倍數全部篩掉*/
for(j = i * i; j < 100; j += i) /*從i*i開始檢測是因為小於i*i的合數都被小於i的素數篩除了*/
isprime[j] = false;
}
for(i = 2; i < 100; i++)
if(isprime[i])
printf("%d ", i);
}
8. 編C語言程序求自然數1~100的全部素數。
#include"stdio.h"
const
int
n=100;
int
fun(int
n)
{
int
i;
for
(i=2;i
if
(n%i==0)
return
0;
return
1;
}
void
main()
{
int
i;
for(i=1;i
{
if(fun(i*(i+1)-1))
printf("%d\t",i);
}
}
這里n設為100就是求100以內的這種自然數,你看看是否可以。
9. 用C語言求解1-100之間的所有素數。
Action()
{
int i,j;
int sum=0;
int flag;//是否為素數
for(i=2;i<=100;i++){
flag=1;
for(j=2;j<=i-1;j++){
if(i%j==0){
flag=0;
break;
}
}
if(flag==1){
sum+=i;
}
}
lr_output_message("sum=%d",sum);
return 0;
}
輸出的結果:sum=1060
(9)c語言1到100的素數擴展閱讀:
方法二、使用函數:
Action()
{
int i;
int sum=0;
for(i=2;i<=100;i++){
if(isPrime(i)){
sum+=i;
}
}
lr_output_message("素數之和sum=%d",sum);//loadrunner的輸出,其他編譯器可能是printf
return 0;
}
int isPrime(a){
int j;
int flag=1;
for(j=2;j<=a-1;j++){
if(a%j==0){
flag=0;
break;
}
}
return flag;
}
10. c語言輸出1-100素數
不能只看程序,還得看數學定義, 素數是從2開始,1不必計算。
for(m=2;m<=100;m++){
if(m==2||m==3){//2比較特殊,是素數,如果用sqrt()來減少判斷次數的話,3放在這里
printf("%d ",m);
continue;
}
if(m%2==0)continue;//只要是偶數,都不是素數
k=sqrt(m);
for(i=2;i<=k;i++){
if(m%i==0){
break;
}
}
if(i==(k+1))//改為k+1
printf("%d ",m);
}
這樣應該就對了。