hdu 2138 How many prime numbers(数论:素数判定)
2014-07-28 17:35
176 查看
因为给出的数据是32位,所以可以直接对每个数暴力判定
当然也可以用大素数判定Miller Rabin算法
两份代码如下:
当然也可以用大素数判定Miller Rabin算法
两份代码如下:
#include <cmath> #include <cstdio> #include <iostream> #include <algorithm> #define LL long long using namespace std; bool judge(int n) { int i; int m = (int)sqrt(n+0.5); for(i=2; i<=m; ++i) if(n % i == 0) return false; return true; } int main(void) { int n, i, cnt, x; while(scanf("%d", &n) != EOF) { cnt = 0; for(i=0; i<n; ++i) { scanf("%d", &x); if(judge(x)) cnt++; } cout << cnt << endl; } return 0; }
#include<stdio.h> #include<stdlib.h> #include<cmath> bool witness(__int64 a,__int64 n) { __int64 t, d, x; d = 1; int i=ceil(log(n-1.0)/log(2.0)) - 1; for(; i>=0; i--) { x = d; d = (d*d)%n; if(d==1 && x!=1 && x!=n-1) return true; if( ((n-1) & (1<<i)) > 0) d = (d*a)%n; } return d==1? false : true; } bool miller_rabin(__int64 n) { if(n==2) return true; if(n==1 || ((n&1)==0)) return false; for(int i=0;i<50;i++){ __int64 a=rand()*(n-2)/RAND_MAX +1; if(witness(a, n)) return false; } return true; } int main() { int n,cnt; __int64 a; while(scanf("%d",&n)!=EOF) { cnt=0; while(n--) { scanf("%I64d",&a); if(miller_rabin(a)) cnt++; } printf("%d\n",cnt); } return 0; }
相关文章推荐
- HDU 2138 How many prime numbers(大数字素数判定)
- How many prime numbers HDU - 2138(素数判定)
- HDU 2138 How many prime numbers(Miller_Rabin法判断素数 【*模板】 用到了快速幂算法 )
- HDU 2138 How many prime numbers (判素数,米勒拉宾算法)
- HDU 2138 How many prime numbers(米勒拉宾素数测试算法)
- HDU 2138 How many prime numbers【素数判断,卡时间!!】
- HDU 2138 How many prime numbers(米勒拉宾素数测试算法)
- HDU-2138-How many prime numbers(米勒拉宾素数测试)
- HDOJ(HDU) 2138 How many prime numbers(素数-快速筛选没用上、)
- hdu 2138 How many prime numbers(求素数)
- hdu 2138 How many prime numbers (Miller Rabbin大质数判定)
- hdu 2138 How many prime numbers 大规模素数判断
- HDOJ(HDU) 2138 How many prime numbers(素数-快速筛选没用上、)
- HDOJ-2138(How many prime numbers)(素数判定)
- hdu 2138 How many prime numbers(打srt(n)素数表加快筛素数法)
- hdu 2138——How many prime numbers
- hdu 2138 How many prime numbers
- HDU 2138 How many prime numbers 质数个数
- hdu 2138 How many prime numbers
- HDU 2138 How many prime numbers