• [恢]hdu 2138


    2011-12-26 23:30:29

    地址:http://acm.hdu.edu.cn/showproblem.php?pid=2138

    题意:输入n个数,问有几个是素数。

    mark:它没说具体规模,开始觉得很麻烦。其实只要到sqrt(num)判断素数性质就好了。。。正规的做法是miller-rabin检测吧。

    代码:

    # include <stdio.h>
    # include <math.h>


    int isprime(int n)
    {
    int i, limit = sqrt(1.0*n) ;
    for (i = 2 ; i <= limit ; i++)
    if (n%i==0) return 0 ;
    return 1 ;
    }


    int main ()
    {
    int n, num, sum ;
    while (~scanf ("%d", &n))
    {
    sum = 0 ;
    while (n--)
    {
    scanf ("%d", &num) ;
    if (isprime(num)) sum++ ;
    }
    printf ("%d\n", sum) ;
    }
    return 0 ;
    }


    更新一个用米勒拉宾的代码:

    # include <stdio.h>
    
    
    # define LL long long
    
    
    int pow_mod (int a, int s, int n)
    {
        long long buff = a, mul = 1 ;
        while (s)
        {
            if (s & 1) mul = (mul * buff) % n ;
            buff = (buff * buff) % n ;
            s >>= 1 ;
        }
        return mul;
    }
    
    
    int Miller_Rabin(int a, int n)
    {
        int r = 0, s = n - 1, j ;
        if ((n % a) == 0) return 0 ;
        while ((s & 1) == 0) s >>= 1, r++ ;
        
        LL k = pow_mod (a, s, n) ;
        if (k == 1) return 1 ;
        for (j = 0 ; j < r ;j++, k = k * k % n)
            if (k == n -1 ) return 1 ;
        return 0 ;
    }
    
    
    int IsPrime (int n)
    {
        
        int i, a[4] = {2,3,5} ; //2.5 * 10^13内只有一个合数 
    //    if (n == 3215031751) return 0 ;
        for (i = 0 ; i < 3 ; i++)
        {
            if (n == a[i]) return 1 ;
            if (Miller_Rabin (a[i], n) == 0) return 0 ;
        }
        return 1 ;
    }
    
    //2 2047
    //3 1373653
    //5 25326001
    //7 3215031751
    
    
    
    int main ()
    {
        int i, n ;
        int sum = 0 ;
        while (~scanf ("%d", &i))
        {
            
            sum = 0 ;
            while (i--)
            {
                scanf ("%d", &n) ;
                if (IsPrime (n)) sum++ ;
            }
            printf ("%d\n", sum) ;
        }
        return 0 ;
    }
  • 相关阅读:
    C#数组添加元素
    C#数组排序方法
    C#遍历数组
    C#动态数组ArrayList
    C#传递数组参数
    基础题(四)
    基础题(三)
    CMDB概述(二)
    CMDB概述(一)
    Django(基础篇)
  • 原文地址:https://www.cnblogs.com/lzsz1212/p/2315369.html
Copyright © 2020-2023  润新知