日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDU 4548 美素数 素数题解

發(fā)布時間:2025/3/17 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU 4548 美素数 素数题解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本題就是能夠直接打表的,推斷能否夠打表也須要技巧的:

1 推斷最大的數(shù)值為1000000。百萬下面的數(shù)打表都是能夠的

2 能夠線性預(yù)處理好。使用素數(shù)篩子法是能夠接近線性預(yù)處理的。

故此能夠打表了。


須要熟悉的基本知識點:

1 素數(shù)篩子法 - 一兩分鐘之內(nèi)寫出代碼

2 一般素數(shù)推斷法,由于位數(shù)相加之后的數(shù)值很小,故此一般素數(shù)推斷就能夠了,假設(shè)寫個primality test 算法會大材小用了。

3 然后是帶點動態(tài)規(guī)劃法的思想把前面的美素數(shù)疊加起來,方便查找。


算是基礎(chǔ)題目了,也是有人說的水題,我還是喜歡叫基礎(chǔ)題吧。

難在于推斷好,并運用好這些基礎(chǔ)知識。簡單優(yōu)雅地解決,寫出代碼。

#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; }


總結(jié)

以上是生活随笔為你收集整理的HDU 4548 美素数 素数题解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。