1. 程式人生 > >【C語言】判斷素數函式

【C語言】判斷素數函式

//方法一:2~m-1有沒有能整除的 
int prime(int m)
{
	int i;
	if(m==0) return 0;
	if(m==1) return 0;//考慮0和1的情況
	for(i=2;i<m;i++)//沒有等號 
	if (m%i==0) break;
	if(i<m) return 0;//用if(i>=m) return 1;是錯誤的 
	else return 1;
 } 
 
 
 //方法二:2~sqrt(m)有沒有能被整除的
 int prime(int m)
{
	int i;
	if(m==0)return 0;
	if(m==1) return 0;
	for(i=2;i<=sqrt(m);i++)//有等號 
	if (m%i==0) break;
	if(i<=sqrt(m)) return 0;//是素數 
	else return 1;//不是素數 
 } 
  //方法三(對於方法二的改進)
 int prime(int m)
{
	int i;
	int k=floor(sqrt(n)+0.5);//避免重複算sqrt,通過四捨五入避免浮點誤差,1.9999,m=sqrt(m),"0.9999將直接被截掉 只剩1"
	if(m<=1) return 0;
	for(i=2;i<=k;i++)//有等號 
	if (m%i==0) return 0;
	else return 1;//不是素數 
 } 

相關推薦

C語言判斷素數函式

//方法一:2~m-1有沒有能整除的 int prime(int m) { int i; if(m==0) return 0; if(m==1) return 0;//考慮0和1的情況 for

c語言判斷某個區間所有的數誰是素數

/****************************  *判斷某個區間的素數個數數量  *素數:只有1和它本身可以整除  *tips:雙重迴圈+flag  *  * **************

C語言記憶體分配函式malloc/ calloc/ realloc及記憶體釋放free

前言: 記憶體區域劃分與分配: 1、棧區(stack)——程式執行時由編譯器自動分配,存放函式的引數值,區域性變數的值等,程式結束時由編譯器自動釋放。 2、堆區(heap) —— 在記憶體開闢另一塊儲存區域。一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可

c語言指向指標(函式)的指標學習

1.指向指標指標的指標 定義形式:[儲存型別] 型別名 **指標名; int **p1; int *p2; int i=3; p2=&i; p1=&p2; **p1=5; 解析圖 把i的地址賦給p2,再把p2的地址賦給p1,p1---->p2------

C語言判斷一個數是不是迴文數

 所謂迴文數,就是說一個數字從左邊讀和從右邊讀的結果是一模一樣的。 首先,我們來判斷一下一個數是否為迴文數: #define _CRT_SECURE_NO_WARNINGS 1 #include&

C語言巨集和函式的區別

由之前的巨集的引入我們知道,巨集函式可以完成一些簡單的運算。那是不是巨集函式就可以取代函式呢?巨集函式和函式到底有哪些區別呢? 下面我們來分析他們其中的區別。 1.程式碼長度:   對於巨集,每次使用時,巨集程式碼都被插入到程式中。除了非常小的巨集之外,程式的長度將大幅度增

c語言判斷一個數n能否同時被3和5整除

// 判斷一個數n能否同時被3和5整除 #include <stdio.h> int main() { int n; printf("請輸入一個整數:"); scanf("%d",&n); if( n % 3 == 0 &&

C語言判斷一個字串是否為迴文字串。

判斷一個字串是否為迴文字串。 #include <stdio.h> int main(void) { char a[100]; int i = 0, j = 0; printf("Plea

C語言判斷質數

原理: 素數(質數)的定義是***只能被1和他本身整除,1不是素數(質數)***。因此要判斷一個數是否為素數.就要判斷它能不能被比他小的所有素數整除。 這裡給出的是一個更快速的方法。要判斷一個數是否為素數,只要判斷比它開根號後的數小的數能否把它整除。原因如下:

C語言求解素數(質數)的N種境界

★前言:   眾所周知,不管是在學習、考試還是以後找工作中,對於求解素數的問題隨處可見,而且還是一個重難點,為何要說是重難點呢?主要是因為對於不同的人往往會有不同做法,但大多數掌握的都是一些非常平庸的做

C語言實現一個函式翻轉字串

實現一個函式翻轉字串 思路:->實現翻轉 1.翻轉即前後交換 2.對於字串前後交換直到中間一個字元終止迴圈 3.令(start++)<(end–)迴圈條件不滿足退出 #incl

C語言編寫一個函式,實現兩個數的交換 詳細解答

今天在用函式寫兩數交換的時候發現有點小挫折,然後經過多次查詢驗證才發現是因為地址不對的緣故,我在此放出兩種交換的方法,先發錯誤的如下:#include <stdio.h> void swap(int a,int b) { int temp=a; a

C語言實現一個函式,可以左旋字串中的k個字元。

.實現一個函式,可以左旋字串中的k個字元。 AABCD左旋一個字元得到ABCDA AABCD左旋兩個字元得到BCDAA 思路: 1.如果直接進行左移,肯定會存在陣列前面的元素丟失。 解決辦法:

C語言I/O函式

1.錯誤報告函式 1)strerror 通過標準錯誤的標號,獲得錯誤的描述字串 ,將單純的錯誤標號轉為字串描述,方便使用者查詢錯誤,但是使用不夠方便。 2)perror 函式原型:void perror(const char *s); perror( ) 用來

C語言判斷一個數的奇偶(位操作)

//判斷一個數的奇偶 #include <stdio.h> int is_signal(int num) { if (num & 1) return 1; else r

C語言判斷一個數是否為2的n次方

//判斷一個數是否為2的n次方 #include <stdio.h> int is_two_n(int num) { if ((num&(num - 1))) //去掉一個1

C語言編寫一個函式,將一個數字字串轉換成這個字串對應的數字(包括正浮點數、負浮點數)

//編寫一個函式,將一個數字字串轉換成這個字串對應的數字(包括正浮點數、負浮點數) //例如:“12.34“ 返回12.34. " -12.34" 返回12.34 #include<

C語言編寫函式實現:100-200素數的輸出

    這裡面,先要理解素數如何求得,可用自己除以2到自己的前一位,根據餘數情況判斷是素數還是合數。優化:(1)從101開始,每次自加2,這樣提高效率一倍。(2)一直除以自己的平方根也可。#include<stdio.h> #include<math.h&g

C語言程式設計練習判斷100到200之間的素數

素數:素數又稱質數,有無限個一個大於1的自然數,除了1和它本身外,不能被其他自然數整除,換句話說就是該數除了1和它本身以外不再有其他的因數;否則稱為合數。解題思路:首先將100-200之間的數依次拿出來

C語言 利用篩選法求100以內的素數

演算法思路: 原理很簡單,就是當i是質(素)數的時候,i的所有的倍數必然是合數。如果i已經被判斷不是質數了,那麼再找到i後面的質數來把這個質數的倍數篩掉。 程式碼如下: //C語言 篩選法求100以內的素數 //原理很簡單,就是當i是質(素)數的時候,i的所有的倍數必然是合數。如果i已經