參加了一個筆試,回來想敲一下代碼,這就來了。
選擇題錯了好多,填空題也錯了,o(︶︿︶)o 唉,又要悲劇了。
該公司沒有說明不讓泄漏題目,所以偶就貼一下咯~
題目:如果兩個整數a和b,a的所有真因子(即除了自身以外的約數)之和等於b,b的所有真因子只之等於a,且a!=b,則稱a和b是一對親和數。
如220的所有真約數之和為:1+2+4+5+10+11+20+22+44+55+110=284,而284的所有真約數之和為:1+2+4+71+142=220.
如果a=b,則稱a為完全數,又稱完美數或完備數,它的所有真因數之和恰好等於自身。
例如:第一個完全數是6,它有約數1,2,3,6,除過自身之外,其餘3個數相加=6.
已發現的完全數都是偶數。
找出1~10000內的所有完全數。然後逐一驗證每隔完全數是否為偶數。
列出1~10000內的所有親和數,對於(220,284)和(284,220),我們認為是同一個親和數對,只列出前項比後項小的(220,284)。
下面給出偶填的代碼:
#include <stdio.h>int finOddPerfectNum(int low,int high){ int perfectNum=0; int oddPerfectNum=0; printf("該範圍內,有完全數:\n"); int i; for(i=low;i<=high;i++) { if( plusFactor(i)== i)//(2)填的 { printf("%d\n",i); perfectNum++;//(3)寫的 if(i%2!=0) { oddPerfectNum++; } } } printf("該範圍內,有完全數共 %d 個\n",perfectNum); return oddPerfectNum;}int plusFactor(int a){ int s=0; int i; for(i=1;i<=a/2;i++) { if(a%i==0)//(5)填的 s=s+i; } return s;}int fineAmicableNum(int low,int high){ int amicableNum=0; printf("該範圍內,有親和數:\n"); int i; for(i=low;i<=high;i++) { int j=plusFactor(i); if(j!=i)//(4)填的 { if(i<j) { printf("%d and %d \n",i,j); amicableNum++; } } } return amicableNum;}int main() { int oddPerfectNum=0; oddPerfectNum=finOddPerfectNum(1,300);//修改這裡的範圍,找完全數!! if(oddPerfectNum>=1)//(1)填的 { printf("該範圍內,有奇完全數 %d 個 \n",oddPerfectNum); } else { printf("該範圍內,沒有奇完全數\n"); } int amicableNum=0; amicableNum=fineAmicableNum(1,300);//修改這裡的範圍,找親和數!! printf("該範圍內,有親和數 %d 對。 \n",amicableNum); return 0;}
運行結果(為了方便粘貼結果,只給了1~300範圍啟動並執行部分結果):
該範圍內,有完全數:628該範圍內,有完全數共 2 個該範圍內,沒有奇完全數該範圍內,有親和數:12 and 1618 and 21……太多了104 and 106108 and 172112 and 136……太多了216 and 384220 and 284……太多了300 and 568該範圍內,有親和數 69 對。
只可惜考試結束一小時後,在電腦上調出來了,沒在紙上當時寫出。
不早了,睡。安~