#include<stdio.h>
#include<math.h>
int main(){
int N,arr[100],flag=0;
scanf("%d",&N);
for(int i=0;i<N;i++){
scanf("%d\n",&arr[i]);
}
for(int i=0;i<N;i++){
flag=0;
for(int j=2;j<=sqrt(arr[i]);j++){
if(arr[i]%j==0){
flag=1;
}
}
if(flag==0){
printf("Yes\n");
}else{
printf("No\n");
}
}
}
第19行做了修改,改动处见注释,供参考:
#include <stdio.h>
#include <math.h>
int main()
{
int N,arr[11],flag=0; // 修改
scanf("%d",&N);
for(int i=0;i<N;i++){
scanf("%d",&arr[i]); //scanf("%d\n",&arr[i]); 修改
}
for(int i=0;i<N;i++){
flag=0;
for(int j=2;j<=sqrt(arr[i]);j++){
if(arr[i]%j==0){
flag=1;
break; // 修改
}
}
if (i) printf("\n"); //修改
if(flag==0 && arr[i] != 1){ // 修改,增加将 1 排除的代码
printf("Yes");// 修改
}else{
printf("No"); // 修改
}
}
return 0;
}
【以下回答由 GPT 生成】
首先,让我们来看看你的代码中有什么问题:
你在循环中使用了两次scanf
函数,第一次是在接受N
的值时,第二次是在接受数组元素的值时。然而,在第二次的scanf
函数中,你使用了\n
作为格式控制符,这会导致每次输入一个数字后需要按下回车键才能继续输入下一个数字。这不是你想要的行为,应该去掉\n
。
在第二个循环中,你使用了一个flag
变量来标记是否找到了一个除了1和它本身以外的因子。然而,在每次循环开始时,你都将flag
重置为0,这导致了flag
始终为0的情况。你应该将flag
定义在第一个循环的外面,并在每次循环开始之前将其重置为0。
下面是修改后的代码:
#include<stdio.h>
#include<math.h>
int main(){
int N, arr[100];
scanf("%d",&N);
for(int i=0; i<N; i++){
scanf("%d", &arr[i]);
}
for(int i=0; i<N; i++){
int flag = 0;
for(int j=2; j<=sqrt(arr[i]); j++){
if(arr[i]%j==0){
flag=1;
break;
}
}
if(flag==0){
printf("Yes\n");
}else{
printf("No\n");
}
}
}
这样,你的代码应该可以正确运行了。希望这可以帮助到你!如果你还有任何问题,请随时提问。
【相关推荐】