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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【 HDU - 1215 】七夕节(数论,约数和公式)

發(fā)布時間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【 HDU - 1215 】七夕节(数论,约数和公式) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題干:

七夕節(jié)那天,月老來到數(shù)字王國,他在城門上貼了一張告示,并且和數(shù)字王國的人們說:"你們想知道你們的另一半是誰嗎?那就按照告示上的方法去找吧!"?
人們紛紛來到告示前,都想知道誰才是自己的另一半.告示如下:?



數(shù)字N的因子就是所有比N小又能被N整除的所有正整數(shù),如12的因子有1,2,3,4,6.?
你想知道你的另一半嗎??

Input

輸入數(shù)據(jù)的第一行是一個數(shù)字T(1<=T<=500000),它表明測試數(shù)據(jù)的組數(shù).然后是T組測試數(shù)據(jù),每組測試數(shù)據(jù)只有一個數(shù)字N(1<=N<=500000).?

Output

對于每組測試數(shù)據(jù),請輸出一個代表輸入數(shù)據(jù)N的另一半的編號.?

Sample Input

3 2 10 20

Sample Output

1 8 22

解題報告:

? ? ?約數(shù)和,可以打表,可以直接算。

AC代碼1:(打表)(93ms,打表的i那層循環(huán)到500000/2,則78ms)

#include<bits/stdc++.h>using namespace std; int num[500000 + 5],n; int main() {for(int i = 1; i<=500000; i++) {for(int j = 2*i; j<=500000; j+=i) {num[j] += i;}}int t; cin>>t;while(t--) {scanf("%d",&n);printf("%d\n",num[n]);}return 0 ;}

AC代碼2:(不打表,Tsqrtn的復雜度)(296ms)

#include <bits/stdc++.h> #define ll long long using namespace std; const int MAX = 1e5+10; int p[MAX]; int a[MAX]; ll qpow(ll a,ll b) {ll ans = 1;while(b){if(b & 1) ans *= a;b >>= 1;a *= a;}return ans; } int main() {int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);int cnt = 0;int tmp = n;// memset(a,0,sizeof a);for(int i = 2; i * i <= n; i++) {if(tmp % i == 0) {p[++cnt] = i;a[cnt]=0 ; while(tmp % i == 0) {a[cnt]++;tmp /= i;}}}if(tmp != 1) {p[++cnt] = tmp;a[cnt] = 1;}ll ans = 1;for(int i = 1; i<=cnt; i++) {ans *= (qpow(p[i],a[i]+1) - 1) / (p[i]-1);}printf("%lld\n",ans-n);//因為最后要輸出的是除去自己的,因為是因子,因子不包括自己。 }return 0; }

總結(jié):? 這題你如果對a數(shù)組進行直接memset,那恭喜你,超時了。? 因為T太大了,不能直接memset,只能初始化到sqrt才可以。這是比較坑的一個地方。

附:Tsqrt分解素數(shù)時的另一種簡潔做法(省掉一個數(shù)組)

void getprimefactor(long long n) { //計算冪次方;int cas=0;for(int i=0; i<len&&prime[i]*prime[i]<=n; i++) {while(n%prime[i]==0) { //可以整除;factor[cas]++;n/=prime[i];}if(factor[cas] != 0)//就是進入了while里面的;cas++;}if(n>1)factor[cas]=1; //就是因為上面for條件的原因;prime[i]*prime[i]<=n當不滿足這個條件的時候就應該還有一個素數(shù)的一次方 }

?

總結(jié)

以上是生活随笔為你收集整理的【 HDU - 1215 】七夕节(数论,约数和公式)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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