ZJNU 2354 - 进贡
分开考虑k=1 k=2和k>=3的情况
2和3这两个质数比较特殊,遇到的话直接输出1就行
对于“神灵的不满意度为m的约数中,比m小且最大的那个”这句描述,指m除了自身和1这两个因子里找最大的那个
可以从2找到sqrt(m),根据因子总是成对出现(除了sqrt(m)),所以找到一个最小因子i就可以把m/i作为最大因子
如果是质数,输出1
输入n和k
k=1时,只能一次性全部进贡,直接走上述过程
k=2时,如果这个数是偶数,可以根据“偶数总能拆成两个质数之和”输出2(2和3已经特殊考虑)
如果是奇数,判断是否是质数,是则输出1,否则去寻找比n小的最大的质数p,则n可以分成p和n-p两部分(因为p最大,所以n-p尽可能小,其最大因子也能尽可能小)
k=3时,如果这个数是偶数,可以根据“偶数总能拆成两个质数之和”输出2(同上)
但是,如果是奇数,判断是否是质数,是则输出1,否则将n拆成n-2和2两部分,因为2是质数,n-2此时是奇数,判断n-2是不是质数,是则输出2,否则可以把n分成3和n-3两部分,n-3定为偶数,根据“偶数总能拆成两个质数之和”,直接输出3
#include<bits/stdc++.h>
using namespace std;
int findm(int in){
int i,d=sqrt(in);
for(i=;i<=d;i++)
if(in%i==)
return in/i;
return ;
}
bool isp(int in){
int i,d=sqrt(in);
for(i=;i<=d;i+=)
if(in%i==)
return false;
return true;
}
int main(){
ios::sync_with_stdio();cin.tie();cout.tie();
int T,n,m,k;
cin>>T;
while(T--){
cin>>n>>k;
if(n==||n==)
cout<<<<endl;
else{
if(k==)
cout<<findm(n)<<endl;
else if(k==){
if(n%==){
if(isp(n))
cout<<<<endl;
else{
m=n-;
while(!isp(m))
m-=;//n是奇数,除2外质数均为奇数,所以每次-2
cout<<findm(n-m)+<<endl;
}
}
else
cout<<<<endl;
}
else if(k>=){
if(n%==){
if(isp(n))
cout<<<<endl;
else{
if(isp(n-))
cout<<<<endl;
else
cout<<<<endl;
}
}
else
cout<<<<endl;
}
}
} return ;
}
ZJNU 2354 - 进贡的更多相关文章
- hdu 3047–Zjnu Stadium(带权并查集)
题目大意: 有n个人坐在zjnu体育馆里面,然后给出m个他们之间的距离, A B X, 代表B的座位比A多X. 然后求出这m个关系之间有多少个错误,所谓错误就是当前这个关系与之前的有冲突. 分析: 首 ...
- hdu 3074 Zjnu Stadium (带权并查集)
Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- hdu3047 Zjnu Stadium【带权并查集】
<题目链接> <转载于 >>> > 题目大意: 有n个人坐在zjnu体育馆里面,然后给出m个他们之间的距离, A B X, 代表B的座位比A多X. 然后求出这 ...
- HDU 3407.Zjnu Stadium 加权并查集
Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- HDU 3047 Zjnu Stadium(带权并查集,难想到)
M - Zjnu Stadium Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Su ...
- HDU3047 Zjnu Stadium 【带权并查集】
HDU3047 Zjnu Stadium Problem Description In 12th Zhejiang College Students Games 2007, there was a n ...
- hdu 3047 Zjnu Stadium 并查集高级应用
Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- hdu3047 Zjnu Stadium (并查集)
Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- Zjnu Stadium(加权并查集)
Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
随机推荐
- DEDECMS打开网站后台系统首页卡解决方法
找到根目录下(一般是dede) templets文件夹下找到index_body.htm文件,将第25行至第41行部分注释或删除 保存文件,然后再打开后台,就不会有这个问题了.
- JPA#复杂查询#自定义查询
编写自定义SQL基于下面信息:1. SpringData JPA 在为Repository接口生成实现的时候,会查找是否有 "接口名称"+"Impl"的类,如果 ...
- SQL中行转列(PIVOT)与列转行(UNPIVOT)
一.行转列 1.测试数据准备 CREATE TABLE [StudentScores] ( ), --学生姓名 ), --科目 [Score] FLOAT, --成绩 ) 执行结果: 2.行转列sql ...
- css怎么让图片垂直左右居中?(外层div是浮动且按照百分比排列)
一.原始的居中方法是把div换成table <div style="width: 500px; height: 200px; border: solid 1px red; text-a ...
- 控制数据的小数位数 java / js
//java一般控制格式都是通过 DecimalFormat 来控制的.下边是个例子. import java.text.DecimalFormat; public class ControlBit ...
- ACM-Divide Tree
题目描述:Divide Tree As we all know that we can consider a tree as a graph. Now give you a tree with n ...
- 51NOD1050 循环数组最大字段和
N个整数组成的循环序列a11,a22,a33,…,ann,求该序列如aii+ai+1i+1+…+ajj的连续的子段和的最大值(循环序列是指n个数围成一个圈,因此需要考虑an−1n−1,ann,a11, ...
- HDU - 4405 Aeroplane chess(期望dp)
题意:沿着x轴从0走到大于等于N的某处,每一步的步数由骰子(1,2,3,4,5,6)决定,若恰好走到x轴上某飞行路线的起点,则不计入扔骰子数.问从0走到大于等于N的某处的期望的扔骰子次数. 分析: 1 ...
- POJ 1126:Simply Syntax
Simply Syntax Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5264 Accepted: 2337 Des ...
- Git - 版本管理 - 版本回退
1 在历史里找到 SHA-1 的值 0c6ab03dbbfe61e39af92dfe5450bf693a72b7d9 2 命令行里执行:git reset --hard 0c6ab03dbbfe61e ...