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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

素数空间

發布時間:2024/10/5 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 素数空间 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description

?一天,小明正在搬磚,他收集了n(n<=1e7)種磚,磚的編號1-n這個時候,他突然說了一句,召喚神龍,然后,他穿越到了一個時空,發現這里的東西都是由素數組成的,這里的磚也和素數有關,他的磚也和他一塊過來了,只是發生了一些變化,編號為1的磚不見了,編號為素數的磚沒有發生變化,編號為合數的磚變成了編號為幾塊素數的磚(磚的編號和為之前的那個合數),由于這個世界能量太少,所以這些合數的磚盡可能的變成數目少的其他磚。于是小明想請教你他還有多少磚。

例如?編號為12的磚會變成編號5?7?的磚??不會變成編號2?3?2?2?3?的磚

?????編號9的磚會變成編號2?7?的磚??不會變成編號?3?3?3??的磚

Input

?給你一個T(1<=T<=3e3

?接下來T行每行一個n(0<=n<=1e7)

Output

一共T行,每一行輸出一個結果;

?

Sample Input

2 3 5

Sample Output

2 5

HINT

?

?

根據哥德巴赫猜想 ?

?? 大于二的偶數可以分解為兩個素數之和;

?? 大于七的奇數可以分解為三個素數之和;(是一定可以分解成三個素數之和,也有可能分解成兩個) 分解成兩個必然有一個是2,其他就是至少三個。

  • 先線性篩篩出所有素數(o(n)的復雜度)
  • 然后遍歷1-1e7里的素數,偶合數,奇合數
  • 預處理一邊就行了。
  • #include<bits/stdc++.h> using namespace std; const int maxn=1e7+5; bool prime[maxn]; int p[maxn]; int tot; void findprime() {for(int i = 2; i < maxn; i ++) prime[i] = true;for(int i = 2; i < maxn; i ++){if(prime[i]) p[++tot]=i;for(int j=1;j<=tot && i*p[j]<maxn; j++){prime[i*p[j]]=false;if(i%p[j]== 0) break;}} } int ans[maxn]; int main() {// freopen("g4.in","r",stdin);// freopen("g4.out","w",stdout);findprime();for(int i=2;i<=maxn;i++){if(prime[i]==1) ans[i]=ans[i-1]+1;else{if(i%2==0) ans[i]=ans[i-1]+2;else{if(prime[i-2]==1) ans[i]=ans[i-1]+2;else ans[i]=ans[i-1]+3;}}}int t;cin>>t;while(t--){int n; cin>>n; cout<<ans[n]<<endl;} }

    ?

    總結

    以上是生活随笔為你收集整理的素数空间的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。