判断n个数是否是素数

输入:

   第一行为一个整数n,代表需要判断的数字量

   第二行包含n个整数。

输出:输出一行,为n个整数,若

为素数则原样输出,若不为素数,则输出-1。

#include<stdio.h>
#define N 100
int f(int x)
{int j;
int a;
		for(j=2;j<x;j++){
			if(x%j==0)
				a++;     
		}
		if(a==0) return x;
		else return -1;
}
int main()
{
	int i,j,n,a=0;
	
	int b[N]={0};//存储输入数据
	int c[N]={0};//存储输出数据
	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%d",&b[i]);
		c[i]=f(b[i]);
	
	
		printf("%d",c[i]);}	
	return 0;
}

为什么输出都是一样的

 

 

for(j=2;j<x;j++){

if(x%j==0){

  return -1;

}

a++;

}

if(a>0) return x;

x%j==0的时候可以直接终止循环,返回-1,因为说明这个数已经不是素数了。

for(j=2;j<x;j++){

if(x%j==0){

  return -1;

}

a++;

}

if(a>0) return x;

#include<stdio.h>
#define N 100
int isPrime(int x){
	for(int i=2;i*i<=x;i++){
		if(x%i==0) return -1;
	}
	return x;
}

int main()
{
	int i,n;

	int b[N];//存储输入数据
	int c[N];//存储输出数据

	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%d",&b[i]);
		c[i]=isPrime(b[i]);
	}
	for(i=0;i<n;i++){
		printf("%d ",c[i]);
	}
	return 0;
}

其实你判断素数的函数可以写的效率更高一点的:

int f(int x){
	for(int i=2;i*i<=x;i++){
		if(x%i==0) return -1;
	}
	return x;
}

判断素数从二开始到根号x就行了

而且,代码第15行的a没有任何作用还与函数f中的定义a混淆,不建议定义

我测试过了,把函数f替换后就可以正常运行了

判断素数这种方法是最快的

望采纳,谢谢

样例输入:

6

43 89 20 389 5 10

样例输出:

43 89 -1 389 5 -1

#include<stdio.h>
#define N 100
int isPrime(int x){
	for(int i=2;i*i<=x;i++){
		if(x%i==0) return -1;
	}
	return x;
} 


int main()
{
	int i,j,n;
	
	int b[N]={0};//存储输入数据
	int c[N]={0};//存储输出数据



	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%d",&b[i]);
		c[i]=isPrime(b[i]);
	
	

	
		printf("%d",c[i];}
	return 0;
}

输入五组数据时就前两个是对的,后边都是-1

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y

C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^