24h購物| | PChome| 登入
2011-06-01 22:07:57| 人氣4,033| 回應1 | 上一篇 | 下一篇

a121. 質數又來囉

推薦 0 收藏 0 轉貼0 訂閱站台

http://zerojudge.tw/ShowProblem?problemid=a121

內容 :

你的好朋友質數先生又來找你囉,給你兩個數字,請算出這兩個數字包含的範圍內有幾個質數。

輸入說明 :

輸入兩個正整數a,b(1<=a<=b<=100000000)。

 保證b-a<=1000 

輸出說明 :

輸出一個非負整數,代表a到b之間(包含a,b)總共有幾個質數。

範例輸入 :help

3 7
6 6
30 50

範例輸出 :

3
0
5

提示 :

出處 :

(管理:VacationClub)

作法 : 暴力

/**********************************************************************************/
/*  Problem: a121 "質數又來囉" from                                          */
/*  Language: C                                                                   */
/*  Result: AC (216ms, 356KB) on ZeroJudge                                        */
/*  Author: morris1028 at 2011-06-01 20:23:09                                     */
/**********************************************************************************/


#include<stdio.h>
#include<math.h>
int P[5200], pt = 0;
void P_Sieve() {
    char mark[100000] = {};
    int a, b;
    P[pt++] = 2;
    for(a = 3; a <= 10000; a += 2)
        if(mark[a] == 0) {
            P[pt++] = a;
            for(b = 3; a*b <= 10000; b += 2)
                mark[a*b] = 1;
        }
}
int Judge(int N) {
    if(N == 1) return 0;
    register int a, sq = (int)sqrt(N);
    for(a = 0; a < pt && P[a] <= sq; a++)
        if(N%P[a] == 0)    return 0;
    return 1;
}
main() {
    P_Sieve();
    int A, B, a;
    while(scanf("%d %d", &A, &B) == 2) {
        int Ans = 0;
        for(a = A; a <= B; a++)
            Ans += Judge(a);
        printf("%d\n", Ans);
    }
    return 0;
}

台長: Morris
人氣(4,033) | 回應(1)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: ZeroJudge |
此分類下一篇:d827. 買鉛筆
此分類上一篇:a104. 排序

xem phim online
nice article
2017-10-03 13:58:12
是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文