QQ5. 素数对
描述
给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000。输入描述
输入包括一个整数n,(3 ≤ n < 1000)输出描述
输出对数示例1
输入:
10
输出:
2
C++ 解法, 执行用时: 1ms, 内存消耗: 220KB, 提交时间: 2017-07-05
#include<stdio.h> int fun(int n); int sum=0; int main() { int n; int i; int k=0; scanf("%d",&n); for(i=2;i<=n/2;i++) { k=fun(i); if(k==1) k=fun(n-i); if(k==1) sum++; } printf("%d\n",sum); return 0; } int fun(int n) { int i,f=0; for(i=2;i<=n/2;i++) { if(n%i==0) break; } if(i>n/2) f=1; return f; }
C 解法, 执行用时: 1ms, 内存消耗: 224KB, 提交时间: 2018-08-13
#include <stdio.h> #include <string.h> int sushu(int x) { if(x==1) return 0; if(x==2) return 1; int j; for(j=2;j<x;j++) { if(x%j==0) return 0; } return 1; } int main() { int dataInput; int i,j,index=0; scanf("%d",&dataInput); for(i=2;i<=dataInput/2;i++) { if(sushu(i)*sushu(dataInput-i)==1)//i+dataInput-i=dataInput index++; } printf("%d\n",index); }
C++ 解法, 执行用时: 1ms, 内存消耗: 228KB, 提交时间: 2017-07-14
#include <stdio.h> #include<stdbool.h> #include<math.h> int main() { int n; scanf("%d", &n); bool is_prime_number[n - 1]; //对应[2,n] //变长数组不能初始化 for (int i = 0; i < n - 1; i++) { is_prime_number[i] = true; } for (int i = 2; i <= sqrt(n); i++) { if (is_prime_number[i - 2]) { for (int j = i*i; j <= n; j += i) { //j初始值为i*i,因为若j有小于i的质因数,则j已被标记过。 is_prime_number[j - 2] = false; } } } int n_pair = 0; for (int i = 0; i < n / 2 - 1; i++) { if (is_prime_number[i] && is_prime_number[n - 4 - i]) { ++n_pair; } } printf("%d", n_pair); return 0; }
C++ 解法, 执行用时: 1ms, 内存消耗: 256KB, 提交时间: 2017-06-26
#include<iostream> #include<cmath> using namespace std; int main() { int a; cin>>a; bool shu[a+1]; for(int i=2;i<=a;++i) shu[i]=true; shu[0]=false; shu[1]=false; for(int i=3;i<=a;++i) { for(int j=2;j<=sqrt(i);++j) if(shu[i]==false) break; else if(i%j==0) shu[i]=false; } int count=0; for(int i=0;i<=a;++i) { for(int j=i;j<=a;++j) { if(shu[i]!=false && shu[j]!=false && i+j==a) { count++; } } } cout<<count; return 0; }
C 解法, 执行用时: 1ms, 内存消耗: 296KB, 提交时间: 2021-07-22
#include <stdio.h> #include <string.h> int main() { int arr[128]={}; int num; int i,j,k=0,count=0; scanf("%d",&num); for(i=2;i<=num;i++) { for(j=1;j<=i;j++) { if(i % j == 0) count++; } if(count == 2) { arr[k]=i; k++; } count=0; } for(i=0;i<k;i++) { for(j=0;j<i+1;j++) { if(arr[i]+arr[j]==num) count++; } } printf("%d ",count); return 0 ; }