返回一个正整数的所有约数个数,主函数输入若干整数,依次输出其约数个数,一个输出占一行,如果是素数,再此行中再输出: 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);
}
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);
}