我想找到一个数字的所有精确除数。目前我有这个:
{ int n; int i=2; scanf("%d",&n); while(i<=n/2) { if(n%i==0) printf("%d,",i); i++; } getch(); }
有什么办法可以改善它?
首先,您的代码应具有条件i <= n/2,否则它可能会遗漏其中一个因素,例如,如果n = 12,则不会打印6。
i <= n/2
将循环运行到数字的平方根(即i <= sqrt(n)),并同时打印i和n/i(均为n的倍数)。
i <= sqrt(n)
i
n/i
{ int n; int i=2; scanf("%d",&n); while(i <= sqrt(n)) { if(n%i==0) { printf("%d,",i); if (i != (n / i)) { printf("%d,",n/i); } } i++; } getch(); }
注意 :
i*i == n