新手赛(2) 第五题 因素和问题
生活随笔
收集整理的這篇文章主要介紹了
新手赛(2) 第五题 因素和问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Problem E
Time Limit : 2000/1000ms (Java/Other)???Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 31???Accepted Submission(s) : 6
Font:?Times New Roman?|?Verdana?|?Georgia
Font Size:?←?→
Problem Description
七夕節那天,月老來到數字王國,他在城門上貼了一張告示,并且和數字王國的人們說:"你們想知道你們的另一半是誰嗎?那就按照告示上的方法去找吧!"人們紛紛來到告示前,都想知道誰才是自己的另一半.告示如下:
數字N的因子就是所有比N小又能被N整除的所有正整數,如12的因子有1,2,3,4,6.
你的緣分如何呢?
Input
輸入數據的第一行是一個數字T(1<=T<=500000),它表示測試數據的組數.然后是T組測試數據,每組測試數據只有一個數字N(1<=N<=500000).Output
對于每組的測試數據N,可計算得到N的因子和M,假設M的因子和是K,則:如果N==M 或者 M不在[1,500000]的范圍之內,則請輸出“注定單身”,
否則,如果 N==K,則請輸出“緣分已定”;
其他情況,則請輸出“緣分未到”;
Sample Input
3 6 7 220Sample Output
注定單身 緣分未到 緣分已定Statistic?|?Submit?|?Back 這個題很容易讓人直接用sqrt(N)*sqrt(M)*T的算法去試一試 極限情況N*M相等 復雜度大概在250000000000 顯然超時 但是這是極限情況 加上OJ可能數據弱 ?也試著提交了一下 結果TLE? 然后試了各種減枝 發現于事無補 應該考慮新算法了
此時知道了一個叫約數和的公式 f(n)=(p1^0+p1^1+p1^2+…p1^a1)(p2^0+p2^1+p2^2+…p2^a2)…(pk^0+pk^1+pk^2+…pk^ak) 打了個素數表依舊超 求素數個數 再用公式依舊超 復雜度難以計算 所以 只有寫完提交試試? 結果依舊TLE這個待思考原因
后面講一下周神的方法 一種類篩選法 直接枚舉約數 然后枚舉有這約數的數即i*j 去加上這個約數 這樣就預處理得到了500000以內所有因數和 復雜度等于(500000/2+500000/3+....)=500000(1/2+1/3+1/4.....1/500000) 學長告訴我當作logN就好了 ?查了一下百度似乎是lnN+C (C為0.57721566490153286060651209) 所以還是能完美過的
貼貼代碼: #include<stdio.h> #define MAXN 500001 int ANS[500001]; int main() {int i,j;for(i=1;i<=MAXN;i++){for(j=2;j*i<=MAXN;j++){ANS[j*i]+=i;}}int T,N,M,K;while(scanf("%d",&T)!=EOF){while(T--){scanf("%d",&N);M=ANS[N];if(N==M||M>500000||M==0) printf("注定單身\n");else{K=ANS[M];if(N==K) printf("緣分已定\n");else printf("緣分未到\n");} }}return 0; }
轉載于:https://www.cnblogs.com/zy691357966/p/5480476.html
總結
以上是生活随笔為你收集整理的新手赛(2) 第五题 因素和问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MVC-READ2
- 下一篇: FTP服务器日志解析