因子和
时间限制:
1000 ms | 内存限制:
65535 KB
难度:1
-
描述
-
题目很简单明了,给你一个数n,判断它是不是素数,如果是素数就输出”Yes”,如果不是素数则输出“No”和它的因子和。例如5,输出“Yes”,6,输出“No 12”.(不包括引号)
-
输入
-
共有t组测试数据(1<=t<=100000)。
接下来有t行,每行有一个数n(1<n<=2000000).
输出
- 如果是素数,输出“Yes”,不是的话就输出“No”和它的因子和,中间用空格分开。 样例输入
-
5
-
91
-
92
-
4
-
23
-
75
样例输出
-
No 112
-
No 168
-
No 7
-
Yes
-
No 124
-
共有t组测试数据(1<=t<=100000)。
ac代码:(无打表)判断素数和加因子和需要注意,O(n)的复杂度是不行的,这两个让我TLE了好几次
(打表)感觉有点麻烦,就没写,以后有空写吧
#include<stdio.h>
int fun(int x)
{
int j,k;
int i=2,bz=1,sum=0;
for(j=1;j*j<=x;j++)//累加因子
if(x%j==0)
{
if(j*j!=x)
sum+=j+x/j;
else
sum+=j;
}
return sum;
}
int main()
{
int n,a;
scanf("%d",&n);
int num;
while(n--)
{
scanf("%d",&a);
num=fun(a);
if(num>a+1)//即判断了素数又输出,不管用什么判断素数的方法都不好使
printf("No %d\n",num);
else
printf("Yes\n");
}
return 0;
}