เพียงแค่บรรทัดเดียว
ฉันคิดอย่างถี่ถ้วนเกี่ยวกับคำถามของคุณและฉันได้พยายามเขียนโค้ดที่มีประสิทธิภาพและมีประสิทธิภาพสูงในการพิมพ์ตัวหารทั้งหมดของตัวเลขที่กำหนดบนหน้าจอเราต้องการโค้ดเพียงบรรทัดเดียว! (ใช้ตัวเลือก -std = c99 ขณะรวบรวมผ่าน gcc)
for(int i=1,n=9;((!(n%i)) && printf("%d is a divisor of %d\n",i,n)) || i<=(n/2);i++);//n is your number
สำหรับการค้นหาจำนวนตัวหารคุณสามารถใช้ฟังก์ชันที่รวดเร็วมากดังต่อไปนี้ (ทำงานอย่างถูกต้องสำหรับหมายเลขจำนวนเต็มทั้งหมดยกเว้น 1 และ 2)
int number_of_divisors(int n)
{
int counter,i;
for(counter=0,i=1;(!(n%i) && (counter++)) || i<=(n/2);i++);
return counter;
}
หรือถ้าคุณปฏิบัติต่อตัวเลขที่กำหนดเป็นตัวหาร (ทำงานอย่างถูกต้องสำหรับจำนวนเต็มทั้งหมดยกเว้น 1 และ 2)
int number_of_divisors(int n)
{
int counter,i;
for(counter=0,i=1;(!(n%i) && (counter++)) || i<=(n/2);i++);
return ++counter;
}
หมายเหตุ: ฟังก์ชั่นทั้งสองข้างต้นทำงานได้อย่างถูกต้องสำหรับเลขจำนวนเต็มบวกทั้งหมดยกเว้นหมายเลข 1 และ 2 ดังนั้นจึงสามารถใช้งานได้กับทุกหมายเลขที่มากกว่า 2 แต่ถ้าคุณต้องการครอบคลุม 1 และ 2 คุณสามารถใช้หนึ่งในฟังก์ชั่นต่อไปนี้ ช้าลง)
int number_of_divisors(int n)
{
int counter,i;
for(counter=0,i=1;(!(n%i) && (counter++)) || i<=(n/2);i++);
if (n==2 || n==1)
{
return counter;
}
return ++counter;
}
หรือ
int number_of_divisors(int n)
{
int counter,i;
for(counter=0,i=1;(!(i==n) && !(n%i) && (counter++)) || i<=(n/2);i++);
return ++counter;
}
ขนาดเล็กสวยงาม :)