input
第一行t个测试案例
t行案例
output
逐行输出素数因子个数和
请问这样写有问题吗?
#include <stdio.h>
int isprime(int k)
{
for (int i=2; i*i<=k; i++ )
{
if (k%i==0)
return 0;
}
return 1;
}
int main()
{
int t;
scanf("%d", &t);//t个测试案例
while (t--)
{
int n;
scanf("%d", &n);//输入案例
int sum = 0;
for (int i=2; i*i<=n; i++ )
{
if (isprime(i))
if (n%i==0)
sum++;
}
if (isprime(n))
sum++;
printf("%d\n", sum);
}
return 0;
}
参考代码如下:
#include <stdio.h>
int isprime(int k)
{
if(k<2)
return 0;
for (int i=2; i*i<=k; i++ )
{
if (k%i==0)
return 0;
}
return 1;
}
int main()
{
int t;
scanf("%d", &t);//t个测试案例
while (t--)
{
int n;
scanf("%d", &n);//输入案例
int sum = 0;
for (int i=1; i<n; i++ ) //修改
{
if (n%i==0 && isprime(i))
sum++;
}
printf("%d\n", sum);
}
return 0;
}
因为题目说的是素数因子个数和,存在一定的歧义,可以理解为素数的因子的个数;也可以理解为数的素数因子。
此处考虑后者:
这样写不太严谨喔
#include <stdio.h>
int isprime(int k)
{
for (int i=2; i<=k/2; i++ )
{
if (k%i==0)
return 1;
}
return 0;
}
int main()
{
int t;
scanf("%d", &t);//t个测试案例
while (t--)
{
int n;
scanf("%d", &n);//输入案例
int sum = 0;
if(isprime(n)){
for(int i=1;i<=n;i++){
if(n%i==0)
sum+=i;
}
printf("%d\n", sum);
}
}
return 0;
}