#include
#include
int FindSu(int n) {
int i;
int flag = 0 ;
for (i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
flag = 1; //flag=1表示不是素数
}
if ((i > n / 2) && (n != 1)) flag = 0;
}
return flag;
}
int main() {
int n;
int times = 0;
scanf_s("%d", &n);
int i;
for (i = 3 ; i <= n; i++) {
if (FindSu(i) == 0) {
if (FindSu(i) == FindSu(i + 2)) {
times++;
i++;
}
}
}
printf("%d", times);
return 0;
}
思路:不采用先计算素数表,采用一边判断x是不是素数,一边判断x+2是不是素数。如果两者都是素数,则计数器+1。
我已经解决的问题:"不超过“和”不超时“。
我在网上找过了其他c语言代码,自己输入随机数进行对比,答案结果一致。
测试点134。
感谢帮助!
修改见注释,供参考:
#include<stdio.h>
//#include<math.h> 修改
int FindSu(int n) {
int i;
int flag = 0 ;
if (n <= 1) return 1; //修改
for (i = 2; i * i <= n; i++) {
if (n % i == 0) {
flag = 1; //flag=1表示不是素数
break;
}
//if ((i > n / 2) && (n != 1)) flag = 0; 修改
}
return flag;
}
int main() {
int n;
int times = 0;
scanf("%d", &n);
int i;
for (i = 3 ; i < n - 1; i++) { //for (i = 3 ; i <= n; i++) 修改
if (FindSu(i) == 0 && FindSu(i + 2) == 0) {
//if (FindSu(i) == FindSu(i + 2)) { 修改
times++;
//i++; 修改
//} 修改
}
}
printf("%d", times);
return 0;
}
收到你的邀请,很荣幸。我给你个简单点的方便理解的:
#include <stdio.h>
int sushu(int n)
{
if(n<=3)
return n>1;
for(int i = 2; i * i <= n; i++)
if(n%i == 0)
return 0;
return 1;
}
int main()
{
int n = 0;
printf("input n: ");
scanf("%d", &n);
int result = 0;
for (int i = 3; i < n - 1; i += 2) { //从3 开始的所有奇数,偶数没有任何必要取计算
if (sushu(i) && sushu(i + 2)) {
result++;
}
}
printf("result: %d\n", result);
return 0;
}
本人思路;
建议利用while循环内嵌for循环先得出全部素数,然后再把全部素数放到一个数组,然后再判断是不是数组对。