从控制台输入整数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
之前为了找公式做了半天。。。
Comments NOTHING