原題鏈結
考察:質數篩
錯誤思路:
用map可以很方便地合併同類項,但是用map會mle
正確思路:
對於1~n的每1個數,它們都會被它的最小質因數篩掉.這道題不是求分解n的質數,不能只列舉到√n.因為1~n之間還存在著質數.這些質數能夠除盡>√n的質數
關於篩法.裡層迴圈的=號非常重要.因為存在n/i=2.2而prime[j]==2的情況,如果沒有等號就會少篩
可以把while迴圈裡的累乘t*=prime[i]換成n/=prime[i]這樣不會溢位.
1 #include 2 #include //吾日三省吾身,質數問題考慮1了嗎
3 #include 4
using
namespace
std;
5const
int n = 1e6+10;6
intprime[n],cnt,ans[n];
7bool
st[n];
8void getprime(intn)9
18}19}
20int
main()
2134 ans[prime[i]] =res;35}
36for(int i=1;i<=cnt;i++)
37if(ans[prime[i]]!=0) printf("
%d %d\n
",prime[i],ans[prime[i]]);
38return0;
39 }
2021.1.24 把這道題又寫了一遍,結果wa得非常慘烈,思路是對的,錯在要開long long
這道題不是篩n的質數,而是篩1~n的質數,所以陣列要開到1e6,而不是√n
雖然這道題不用處理1,但一定要注意1
數論題建議無腦long long.....這道題累乘溢位了
AcWing 197 階乘分解
給定整數 n 試把階乘 n 分解質因數,按照算術基本定理的形式輸出分解結果中的 pi 和 ci 即可。輸入格式 乙個整數n。輸出格式 n 分解質因數後的結果,共若干行,每行一對pi,ci,表示含有pcii項。按照pi從小到大的順序輸出。資料範圍 1 n 106 輸入樣例 5輸出樣例 2 33 1 5...
AcWing197階乘分解
n 的最大質因子不超過n。先質數篩出n以內質數,然後算在n!出現了多少次。對於質數p,只有質數p的倍數才含p。至少含有乙個p的有 include include include define ms a,b memset a,b,sizeof a define inf 0x3f3f3f3f defin...
AcWing 197 階乘分解
給定整數 n 試把階乘 n 分解質因數,按照算術基本定理的形式輸出分解結果中的 pi 和 ci 即可。輸入格式 乙個整數n。輸出格式 n 分解質因數後的結果,共若干行,每行一對pi,ci,表示含有pcii項。按照pi從小到大的順序輸出。資料範圍 1 n 106 輸入樣例 5輸出樣例 2 33 1 5...