poj2739 poj2100 尺取法基础(二)

时间:2023-03-10 01:11:47
poj2739 poj2100 尺取法基础(二)

都是很简单的题目

poj2739素数打表+单点推移

#include<iostream>
#include<cstring>
#include<cstdio> using namespace std; int cnt,n;
int flag[];
int prime[] = {,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,};
void dabiao(){ for(int i=;i<=;i++){
if(flag[i])continue;
prime[cnt++]=i;
for(int j=;j*i<=;j++)
flag[i*j]=;
}
} int main(){
dabiao();
while(scanf("%d",&n),n){
int l=,r=,sum=,ans=;
while(){
if(sum==n) ans++;
if(sum>=n) sum-=prime[l++];
else{
if(prime[r]<=n) sum+=prime[r++];
else break;
}
}
printf("%d\n",ans);
}
}

poj2100单点推移

#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#define ll long long using namespace std; vector<ll> vec[];
ll cnt,n; int main(){
while(scanf("%lld",&n)==){
ll l=,r=,sum=;
for(int i=;i<=cnt;i++)
vec[i].clear();
cnt=;
while(){ if(sum==n){
cnt++;
for(int i=l+;i<=r;i++)
vec[cnt].push_back(i);
}
if(sum>=n){
l++;
sum-=l*l;
}
else {
if(r*r<=*n){
r++;
sum+=r*r;
}
else break;
}
}
printf("%lld\n",cnt);
for(int i=;i<=cnt;i++){
printf("%d ",vec[i].size());
for(int j=;j<vec[i].size();j++)
printf("%lld ",vec[i][j]);
puts("");
}
}
return ;
}