hdu 2138 How many prime numbers(数论:素数判定)
来源:互联网 发布:mac粉尘壁纸 编辑:程序博客网 时间:2024/06/10 06:58
因为给出的数据是32位,所以可以直接对每个数暴力判定
当然也可以用大素数判定Miller Rabin算法
两份代码如下:
#include <cmath>#include <cstdio>#include <iostream>#include <algorithm>#define LL long longusing 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;}
0 0
- hdu 2138 How many prime numbers(数论:素数判定)
- hdu 2138 How many prime numbers (素数判定)
- HDOJ-2138(How many prime numbers)(素数判定)
- HDU 2138 How many prime numbers(大数字素数判定)
- HDU -- 2138 How many prime numbers + hihocoder 1287【大素数判定】
- hdu 2138 How many prime numbers(求素数)
- HDu 2138 How many prime numbers 高效Miller素数测试
- hdu 2138 How many prime numbers 大规模素数判断
- HDU 2138 How many prime numbers【素数判断,卡时间!!】
- ACMSTEP 2.1.2 How many prime numbers //数论 素数
- HDU-2138 How many prime numbers
- 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
- hdu-2138- How many prime numbers
- 网站出问题怎么办
- Linux(Ubuntu)开启ssh服务
- PHP 添加水印 & 比例缩略图 & 固定高度 & 固定宽度 类。
- 查询电话联系人(包括sim卡)
- freemarker使用心得
- hdu 2138 How many prime numbers(数论:素数判定)
- 后会无期
- 为什么你这么笨呀?
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m 的最大值比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1; {3,6}{2,4,3} m=2 {3,3}{2
- RCP: P2 Update两个烦人bug和解决办法
- julia 与并行计算(部分有参考和转载)
- 从零开始学Xamarin.Forms(一) 概述
- addmrpt_1_50348_5034 分析
- 有没有免费的数据恢复软件,easyrecovery中文版