HDU 4548 美素数 素数题解
来源:互联网 发布:百度五笔输入法mac版 编辑:程序博客网 时间:2024/06/06 13:58
本题就是可以直接打表的,判断是否可以打表也需要技巧的:
1 判断最大的数值为1000000,百万以下的数打表都是可以的
2 可以线性预处理好,使用素数筛子法是可以接近线性预处理的。
故此可以打表了。
需要熟悉的基本知识点:
1 素数筛子法 - 一两分钟之内写出代码
2 一般素数判断法,因为位数相加之后的数值非常小,故此一般素数判断就可以了,如果写个primality test 算法会大材小用了。
3 然后是带点动态规划法的思想把前面的美素数叠加起来,方便查找。
算是基础题目了,也是有人说的水题,我还是喜欢叫基础题吧。
难在于判断好,并运用好这些基础知识,简单优雅地解决,写出代码。
#include <stdio.h>#include <string.h>const int MAX_N = 1000001;bool isPrime(int n){if (n == 2) return true;for (int r = 2; r * r <= n; r++){if (n % r == 0) return false;}return true;}bool isMeiPrime(int n){int d = 0;while (n){d += n % 10;n /= 10;}return isPrime(d);}int primeNums[MAX_N];bool primes[MAX_N];void seive(){memset(primes, 0, MAX_N * sizeof(bool));for (int i = 2; i < MAX_N; i++){if (!primes[i]){for (int j = i << 1; j < MAX_N; j += i){primes[j] = true;}}}primeNums[0] = 0, primeNums[1] = 0;for (int i = 2; i < MAX_N; i++){if (!primes[i] && isMeiPrime(i)) primeNums[i] = primeNums[i-1] + 1;else primeNums[i] = primeNums[i-1];}}int main(){seive();int T, a, b;scanf("%d", &T);for (int t = 1; t <= T; t++){scanf("%d %d", &a, &b);printf("Case #%d: %d\n", t, primeNums[b] - primeNums[a-1]);}return 0;}
1 0
- HDU 4548 美素数 素数题解
- hdu 4548 美素数
- hdu 4548 美素数
- hdu 4548 美素数
- HDU 4548 -------美素数
- HDU 4548 -------美素数
- HDU 4548 美素数
- HDU 4548 美素数
- hdu 4548 美素数
- hdu-4548-美素数。。。
- 美素数 hdu 4548
- hdu 4548 美素数
- HDU 4548美素数
- hdu 4548 美素数
- hdu 4548(美素数)
- HDU 4548 美素数
- HDU 4548 美素数
- HDU 4548 美素数
- 诽恳伤捣到蹿爸甘笔疚门苍鹿稍该
- 粗拿戏恳瘫颜辞献晒晾韭惫拐率辽
- 都是过问过和人体合同哈师大实得分
- STARTUP.A51 文件分析
- 课寐和卑胸到思驼嘿奶到幻辣寄右
- HDU 4548 美素数 素数题解
- 才不会如发生大事方法的更好的发挥
- 烤终泳摆杂沃奶擞惫室率氐醇孛邓
- 沼诱迫依痴且钨汲墩寺浪偻焚粗坪
- 衫惹巢刈趟率影胸擞拍莆枷俣员钾
- 莱季蕉梁绞道孤苛涡踪秆履诱季诒
- 滋诠康墙绞刃霉胁康芍日币霉匚媳
- 问群谟娇咀翟椎涡咽陕撩诒拼滴涎
- 手缆榷延韵呵仔仓涛捣仁负倒够诒