2 条题解
-
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
- 标签
- 递交数
- 246
- 已通过
- 138
- 上传者