7-10约数个数(函数实现)运行超时,怎么改进

7-10 约数个数(函数实现)

返回一个正整数的所有约数个数,主函数输入若干整数,依次输出其约数个数,一个输出占一行,如果是素数,再此行中再输出: Is Prime。

输入样例:
100 101 1001
结尾无空行
输出样例:
9
2 Is Prime
8
结尾无空行

#include<stdio.h>
void f(int num);
int main()
{
    int num[5];
    int i=0;
    do{
        scanf("%d",&num[i++]);
    }while(getchar()!='\n');
    for(int j=0;j<i;j++)
    {
        f(num[j]);
    }
}

void f(int num)
{
    int count=0;
    for(int i=1;i<=num;i++)
    {
        if(num%i==0)
            count+=1;
    }
    if(count==2)
        printf("2 Is Prime\n");
    else
        printf("%d\n",count);
}

运行超时了
自定义测试可以得到正确结果,但是就是说我超时TuT

for(int i=1;i<=num;i++)
不用循环所有数啊,你循环到sqrt(num)就可以了
当num%i==0时,除了i是约数,num/i也是约数


//我觉得可以这样试试()
#include<stdio.h>
#include<math.h>
int prime(int n)
{
    if (n == 1)
    {
        return 0;
    }
    if (n == 2)
    {
        return 1;
    }
    int i;
    for (i = 2; i <=sqrt(n); i++)
    {
        if (n % i == 0)
        {
            return 0;
        }
    }
    return 1;
}
void divisor(int n)
{
    int count = 0;
    if (prime(n))
    {
        printf("2 Is Prime\n");
    }
    else if (prime(n) == 0)
    {
        int i;
        for (i = 1; i <= n; i++)
        {
            if (n % i == 0)
            {
                count++;
            }
        }
        printf("%d\n", count);
    }
}
int main()
{
    int n;
    while (scanf("%d",&n) != EOF)
    {
        divisor(n);
    }
    return 0;
}

代码改成下面的试试:

#include<stdio.h>
void f(int num);
int main()
{
    int num[5];
    int i=0;
    do{
        scanf("%d",&num[i]);
        f(num[i]);
        i++;
    }while(getchar()!='\n');
    return 0;
}
void f(int num)
{
    int count=0;
    for(int i=1;i<=num;i++)
    {
        if(num%i==0)
            count+=1;
    }
    if(count==2)
        printf("2 Is Prime\n");
    else
        printf("%d\n",count);
}