PTA—判断素数

时间:2025-02-09 22:26:32

本题的目标很简单,就是判断一个给定的正整数是否素数。

输入格式:

输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于231的需要判断的正整数。

输出格式:

对每个需要判断的正整数,如果它是素数,则在一行中输出Yes,否则输出No

输入样例:

2
11
111

输出样例:

Yes
No

进行多个数值的输入,然后在判断数值是否为素数,最后来进行输出

那么对于多个数值,两种方法“for , 数组”

利用for

#include <>
#include <> 
int prime(int num);
int main(void)
{
	int num,limit;
	printf("请输入多个整数:");
	scanf_s("%d", &limit);
	for(int i=1;i<= limit;i++){
	scanf_s("%d",&num); //我这个样子不是来进行逐步调用判断的吗
	if (prime(num)) { //if(1)是可以执行的
		printf("Yes");
		putchar(' ');
	}
	else {
		printf("No");
		putchar(' ');
	}
  }
	return 0;
}
int prime(int num)
{
	int flag = 1, i;
	for (i = 2; i < sqrt(num); i++) {//这个减少循环的次数
		if (num % i == 0) {
			flag = 0;
			break;
		}
		return (flag);
	}
}

 这里边有math函数,可以来减少运算的。

其实我想推荐的是第二种方法,利用数组。

#include <>
#define NUMBER 10
int a[10];
void  prime_judge(int arr[], int num);
int main(void)
{
	int arr[NUMBER]; //限制最多储存的数字是10
	int i, num;
	printf("您打算输入多少个数字:");
	scanf("%d", &num);
	for (i = 0; i < num; i++) {//输入的数字小于num
		scanf("%d", &arr[i]); //输入了“num”个数字
	}
	//判断
	prime_judge(arr, num);//函数调用数组的同时,只是数组名
	for (i = 0; i < num; i++)
		if (a[i] != 1)  printf("Yes ");
		else  printf("No ");
	return 0;
}
void  prime_judge(int arr1[], int num) {
	int j = 0;   //我的数值传送不过来啊
	int i;
	for (i = 0; i < num; i++)
		for (j = 2; j < arr1[i]; j++)
			if (arr1[i] % j == 0)
				a[i] = 1; //将所有不是素数的来赋值为 1
}

第二种方法就是会在函数中来进行判断,但是有一个全局的数组,这货的作用则是说,我有十个空间,然后在这是个空间里开始的数值都是0,但是你是可以改变的,当你是素数的时候,你讲这个数组的值为1,不是还是为0,然后在在main函数里进行判断,这个时候你仅仅去判断它是否是1 或者说是 0就行了,是1就输出不是素数(no)然后是0 就是是素数,这个就能得到有效的判断。