10.27 简单的找素数 “添加标志”的使用

发布于 27 天前  205 次阅读


 从控制台输入整数n(n>=1),计算并输出从1到n之间(包括n)个位为1的所有素数,若没有符合要求的素数,则输出-1


#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int su(int i) {
	for (int j = 2; j < i; j++) {
		if (i % j == 0) {
			return 0;
		}
	}
	return 1;
}

int main() {
	int n,count=0;
	scanf("%d", &n);
	int str[999];
	for (int i = 2; i <= n; i++) {
		if (su(i) == 1) {
			str[count] = i;
			count++;
	   }
	}
	for (int j = 0; j < count; j++) {
		if (str[j] % 10 == 1) {
			printf("%d ", str[j]);
		}
	}
	return 0;
}

肯定是先判断包括n在内的素数有哪些,很容易想到先要用for循环遍历这些数

判断一个数是不是素数,很关键的一点,这个数字大于1且仅被1和本身整除

那我们进行循环,用这个数模2,3,4...,i-1 但是我们是要找到能够全部满足这些的那个数啊

那我们可不可以单独写一个函数,仅作判断是否是素数

这个函数中,for遍历2,3,4...,i-1 只要有一个不符合要求,我们就给它踢出去,只要直到循环结束它还没有被踢出去,那就是我们要找到的素数

接下来,我采用了char 类型的数组,但是,有时会出现问题

为什么?我将素数存储在 char 数组中,而其中如果有一个素数的值超过 char 的范围(-128 到 127)。便会导致数据溢出和未定义行为。所以,应该使用 int 数组来存储素数(32位中它的正整数范围达到2^31-1,多么大!)

我们用定义了一个计数器变量count 这个变量可以帮助我们更新str[ ]数组下标的值

同时,温馨提醒下,请在定义str的时候内存定义大一点(最好999),因为有些题目真的会超


#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main() {
	int n;
	scanf("%d", &n);
	int tao=1;
	for (int i = n-1; i > 0; i--) {
		tao = (tao + 1) * 2;
	}
	printf("%d", tao);
	return 0;
}

猴子偷桃不过如此!就是注意i定义为n-1,因为n-1天才是(1+1)*2=4

之前为了找公式做了半天。。。

届ける言葉を今は育ててる
最后更新于 2024-11-05