输入1 3 4时,我的代码遇到问题。尽管我找不到任何错误,因为它可以与其他数字/ ps完美配合。旨在解决codechef问题POTATOES
问题摘要:编写一个程序,该程序输入一个整数T,然后输入T行,其中T行包含两个以空格分隔的正整数。对于这些行中的每行,输出最小的数字(> 1),将其加到这两个数字的总和上,得出的总和就是质数。
我的代码是
#include<stdio.h>
#include<math.h>
int prime(int a,int b);
int main() {
int c;
scanf("%d",&c);
int a,b,d[c];
for(a=0; a<c; a++) {
int x,y;
scanf("%d %d",&x,&y);
b=(x+y);
if(prime(x,y)-b!=0)
d[a]=prime(x,y)-b;
else d[a]=prime((x+1),y)-b;
}
for(a=0; a<c; a++)printf("%d\n",d[a]);
return 0;
}
int prime(int a,int b) {
int c,e;
for(c=2; c<(a+b); c++) {
if((a+b)%c==0) {
b++;
continue;
}
return(a+b);
}
}
答案 0 :(得分:0)
您的代码错误。在函数prime()
中,由于语句b++;
,(a+b)
在(a+b)%c
中发生了变化,但递增后的c
永不返回。因此,对于较大的质数,代码将失败
例如:-(89,1)(79,1)等
您的代码中也不需要d[c]
。您不需要存储所有输出。计算一个输出时,只需打印它即可。即ok
与代码厨师。您也可以将问题分为功能。
尝试以下简化代码:-
#include <stdio.h>
#include <math.h>
int prime(int n);
int make_prime(int a);
int main()
{
int c;
scanf("%d", &c);
int a, b;
for (a = 0; a < c; a++)
{
int x, y;
scanf("%d %d", &x, &y);
b = (x + y);
printf("%d\n", make_prime(b));
}
return 0;
}
int make_prime(int a)
{
int c=1;
while(prime(a+c)==0){
c++;
}
return c;
}
int prime(int n){ // simple prime function
int i,flag=1;
for (i = 2; i <= (n)/2; i++)
{
if ((n) % i == 0)
{
flag=0;
break;
}
}
return flag;
}