這幾個問題都可以用乙個輔助陣列來幫助求解,也有的稱為是伴隨陣列。
1、素數
篩選法求素數:把從1開始的、某一範圍內的正整數從小到大順序排列, 1不是素數,首先把它篩掉。剩下的數中選擇最小的數是素數,然後去掉它的倍數。依次類推,直到篩子為空時結束。
void prime(int n)
} }for (i = 1;i <= n;i++)
cout << endl;
}
2、親和數(
參考)如果兩個整數,其中每乙個真因子的和都恰好等於另乙個數,那麼這兩個數,就構成一對「親和數,例如:220的真因子是:1、2、4、5、10、11、20、22、44、55、110;
284的真因子是:1、2、4、71、142。
而這兩個數恰恰等於對方的真因子各自加起來的和即
220=1+2+4+71+142=sum[284],
284=1+2+4+5+10+11+20+22+44+55+110=sum[220],
即有sum[220]=sum[sum[284]]=284。
void friendnum(int n)
} for (i = 1;i <= n;i++)
}
3、完數
如果乙個數恰好等於它的因子之和,則稱該數為「完全數。例如:第乙個完全數是6,它有約數1、2、3、6,除去它本身6外,其餘3個數相加,1+2+3=6。
void perfectnum(int n)
} for (i = 2;i <= n;i++)
cout << endl;
}
另外還有乙個伴隨陣列的應用,即求區間第k小的數,參考
這裡
大數親和數對的求法 友元數對
做了幾天的親和數對,今天晚上終於ac了,不容易呀,下面講一講我的做法吧,希望能夠幫助大家 題目如下 數字220和284是一對友元數字,因為220的所有因子的和是284,284的所有因子的和是220。你能在小於10000的數中找出有多少對友元數字麼?那是必須的。你的任務是在給定的區間 a,b 中找出有...
求孿生數 親和數
當前程式設計題 求孿生數 1.問題描述 孿生數定義 如果 a 的約數 因數,包含1,但不包含a本身 之和等於 b b 的約數 因數 之和等於 a a和 b 稱為孿生數 a和b不相等 試找出正整數 m 和 n 之間的孿生數。輸入形式 從控制台輸入兩個正整數m和n 1 m 輸出形式 在標準輸出上輸出符合...
素數的求法
1.素數的定義 只能被1和它自己整除的自然數稱為素數,特別規定1不屬於素數。2.求法 1 根據素數的定義,很明顯,如果乙個數是素數 它的因子只包含1和它本身。因此可以根據判別某個數的因子的方法來判斷其是否是素數。intisprime intn return1 2 但是如果要求求出1000000以內的...