4 条题解
-
0
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<math.h> int main() { int a =2,b,n; scanf("%d",&n); for (;a<=n/2;a++) { int A = 0, B = 0, i = 2;//大写字母代表对应小写字母是否是素数的真假 do {//要求比1大且比根号a(取整)小或等的数字不可以整除a,但是可能没有这样的数字 if (!((int)sqrt(a)-1))//讨论一下 { A++; break; } else if (a % i == 0) break; if (i-1 == (int)sqrt(b)-1)//此处的i即是我昨天晚上所言的计数器 { A++; break; } } while (i++); b = n - a;//然后同理判断b i = 2; do {//要求比1大且比根号b(取整)小或等的数字不可以整除b,但是可能没有这样的数字 if (!((int)sqrt(b) - 1))//讨论一下 { B++; break; } else if (b % i == 0) break; if (i-1 == (int)sqrt(b)-1) { B++; break; } } while (i++); if (A && B) { printf("%d %d", a, b); return 0; } } return 0; } -
0
#include <iostream> #include <cmath> bool is_prime(int a) { if(a < 2) return false; if(a == 2) return true; if(a % 2 == 0) return false; for(int i = 3; i <= sqrt(a); i += 2)//对称法 { if(a % i == 0) return false; } return true; } int main() { using namespace std; int n; cin >> n; for(int i = 2; i <= n / 2; i++) //对称法 { if(is_prime(i) && is_prime(n - i)) { cout << i << " " << n - i << endl; break; } } return 0; } -
0
题目不难,但是这里有个小方法不知道你知不知道。
我们可以使用数组存储目前所有小于n的素数,之后用该数组中小于n的根号的数去作为因数去判断之后的数是否为质数。
最后对应这道题,获得数组之后遍历即可(因为此方法获得的质数数组已经是升序排列了,无需再排
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> int sss=0; int ss[1000]; int isp(int n){ int i; if(n<2) return 0; for(i=0;i<sss&&ss[i]*ss[i]<=n;i++){ if(n%ss[i]==0){ return 0; } } return 1; } void finds(int max){ int num; for(num=2;num<=max&&sss<1000;num++){ if(isp(num)){ ss[sss]=num; sss++; } } } int main(){ int n;scanf("%d",&n); finds(n); int i,j,found=0; for(i=0;i<sss;i++){ if(ss[i]>n) break; for(j=sss-1;j>=0;j--){ if(ss[j]>=n) continue; if(ss[i]+ss[j]==n){ printf("%d %d",ss[i],ss[j]); found=1; break; } if(ss[i]+ss[j]<n) break; } if(found) break; } return 0; } -
0
#include<bits/stdc++.h> using namespace std;
bool judge(int x) { int flag=1;
if(x==1||x<=0||x==4) flag=0; else if(x==2||x==3) flag=1; else { for(int i=2; i*i<=x; i++) { if(x%i==0) { flag=0; } } } return flag;}
int main() { int n;
cin>>n; for(int i=3; 2*i<=n; i++) { int x1=i,x2; if(judge(x1)) x2=n-x1; if(judge(x2)) { cout<<x1<<" "<<x2; break; } else continue; } return 0;}
- 1
信息
- ID
- 236
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 394
- 已通过
- 216
- 上传者