2020-11-18

blood_of_thistle發表於2020-11-19

區間素數和(C語言版)

###求素數為原始演算法
問題描述
輸入兩個整數,計算它們之間所有素數的和。例如,輸入10和1,因為在1到10之間有2,3,5和7共4個素數,因此輸出和是17。
輸入描述
兩個以空格隔開的無序整數
輸出描述
一個整數
樣例輸入
-5 5
樣例輸出
10

#include<stdio.h>
int main()
{
	int a,b,c;
	scanf("%d %d",&a,&b);
	if(a>b){/*該語句也可用此語段表達:c=a<b?a:b;b=b<a?a:b;c=a;*/ 
		c=a; 
		a=b;
		b=c;
	}
	if(a<=1)	a=2;/*因為素數是自然數,且素數最小為2,所以當輸入的數小於2時,從2開始*/ 
	if(b<=1)	b=2;
	int i,j,sum=0;
	for(i=a;i<=b;i++){/*第一重迴圈的目的是遍歷區間中可能為素數的數*/ 
		for(j=2;j<i;j++){/*第二重迴圈是為了遍歷除數,從2到i-1*/ 
			if(i%j==0){/*如果發現其中有一個i在模j時是等於0的,則此i為非素數*/
				break;/*為提高效率,我們在第一次遇到此種情況時便判定此數為非素數 ,不必繼續第二重迴圈,故用break強制結束此重迴圈,繼續第一重迴圈*/ 
			}
		}
		if(i==j)	sum+=i;/*因為若i模了2到i-1中所有的數之後沒有出現為0的情況,所以j最終++後等於i;如其中出現一次i%j==0的情況,則j必然小於i*/ 
	}
	printf("%d\n",sum);
    return 0;
}