ACM-Antiprime数
问题描述: swust打不开,随便找了个博客。。。。
对于任何正整数x,起约数的个数记做g(x).例如g(1)=1,g(6)=4.
定义:如果某个正整数x满足:对于任意i(0<i<x),都有g(i)<g(x),则称x为反素数.
现在给一个N,求出不超过N的最大的反素数.
比如:输入1000 输出 840
思维过程:
求[1..N]中最大的反素数-->求约数最多的数(约数同样多取数值小的)
简单证明:
如果X是答案,但X不是约数最多的数,假设约数最多的数是Y,那么Y>X,否则不符合反质数的定义。
那么很明显Y也是一个反质数,且Y比X大,那么答案应该是Y而不是X。
如果求约数的个数 756=2^2*3^3*7^1
(2+1)*(3+1)*(1+1)=24
基于上述结论,给出算法:按照质因数大小递增顺序搜索每一个质因子,枚举每一个质因子
为了剪枝:
性质一:一个反素数的质因子必然是从2开始连续的质数.
因为最多只需要10个素数构造:2,3,5,7,11,13,17,19,23,29
性质二:p=2^t1*3^t2*5^t3*7^t4.....必然t1>=t2>=t3>=....
//// Antiprime数.cpp : 定义控制台应用程序的入口点。
////
//
#include "stdafx.h" #include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll;
int prime[] = { , , , , , , , , , , };
//相应的限制次数{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
//2*3*5*7*11*13*17*19*21*23>n,所以只需考虑到23即可
ll n, BestSum, BestNum; //num表示当前数字大小、sum表示当前数字的约数个数、limit表示第k个素数的上限,k表示第k个素数
void solve(ll num, ll sum, ll limit, ll k)
{
//cout << "=======================: pos:" << k << "\tdiv:" << sum << "\tnum:" << num << "\tlimit:" << limit << endl;
if (sum>BestSum){
BestSum = sum;
BestNum = num;
}
else if (sum == BestSum&&num<BestNum){//约数个数一样时,取小数
BestNum = num;
}
for (int i = ; i <= limit; i++){//素数k取i个
cout << "=====================================================================" << endl;
cout << "now num:" << num << "\tk:" << k << "\ti:" << i << "\tlimit:" << limit << endl;
cout << num << "*prime[" << k << "]=" << "="<<num <<"*"<<prime[k]<< "=" << num * prime[k] << endl;
cout << "sum:" << sum << "\ti:" << i << "\tsum*(1+" << i << ")=" << sum*( + i) << endl;
cout << "=====================================================================" << endl<<endl;
num *= prime[k];
if (num>n) return;
solve(num, sum*( + i), i, k + );
}
}
int main(){
cin >> n;
solve(, , , );//每个数最多被分解成10质数的乘积
cout << BestNum;
return ;
}
下面是当n=20时,问题解的遍历图形。

ACM-Antiprime数的更多相关文章
- [swustoj 373] Antiprime数
Antiprime数(0373) 问题描述 如果一个自然数n(n>=1),满足所有小于n的自然数(>=1)的约数个数都小于n的约数个数,则n是一个Antiprime数.譬如:1, 2, 4 ...
- COGS 693. [SDOI2005]Antiprime数 唯一分解定理逆用
693. Antiprime数 ★★ 输入文件:antip.in 输出文件:antip.out 简单对比 时间限制:1 s 内存限制:128 MB 如果一个自然数n(n>=1), ...
- Antiprime数-数论
题目描述 Description 如果一个自然数n满足:所有小于它的自然数的约数个数都小于n的约数个数,则称n是一个Antiprime数.譬如:1.2.4.5.12.24都是Antiprime数. ...
- 巴蜀1088 Antiprime数
Description 如果一个自然数n(n>=1),满足所有小于n的自然数(>=1)的约数个数都小于n的约数个数,则n是一个Antiprime数.譬如:1, 2, 4, 6, 12, 2 ...
- ACM 删数问题 SDUT 2072
http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/2072.html 删数问题 Time Limit ...
- ACM——完数
完数 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 总提交:1930 测试通过:413 描述 自然数中,完数寥若晨 ...
- 南阳acm奇偶数分离
这道题的特殊要求是要先先限定了测试数据的组数,所以多加一条循环语句.下面是已通过的代码: #include<stdio.h> main() { int n,m,i,j; ...
- ACM 阶乘数位数
描述 N!阶乘是一个非常大的数,大家都知道计算公式是N!=N*(N-1)······*2*1.现在你的任务是计算出N!的位数有多少(十进制)? 输入 首行输入n,表示有多少组测试数据(n<1 ...
- ACM Fibonacci数 计算
Fibonacci数 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列,它可以递 ...
- ACM题目————数素数
令Pi表示第i个素数.现任给两个正整数M <= N <= 104,请输出PM到PN的所有素数. 输入格式: 输入在一行中给出M和N,其间以空格分隔. 输出格式: 输出从PM到PN的所有素数 ...
随机推荐
- Nginx解决服务器宕机问题
1.Nginx解决服务器宕机问题,Nginx配置服务器宕机策略,如果服务器宕机,会找下一台机器进行访问 配置nginx.cfg配置文件,在映射拦截地址中加入代理地址响应方案 location / { ...
- AJAX请求返回JSON数据动态生成html
1:DeliveryPersonVO对象 package com.funcanteen.business.entity.delivery.vo; import java.util.List; impo ...
- AVL-Tree (平衡二叉树)
看到网上AVL-Tree大多数都是用相同的实现方式 —— 递归进行插入.删除.维护平衡等,而我比较喜欢用带父指针的数据结构,于是想了一下午,用C实现了一个迭代版的. 由于没有暂时没有好的画二叉树的工具 ...
- Law of large numbers and Central limit theorem
大数定律 Law of large numbers (LLN) 虽然名字是 Law,但其实是严格证明过的 Theorem weak law of large number (Khinchin's la ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 表格:精简表格
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 表单:表单帮助文本
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 《Java周边》IDEA 创建Gradle子项目
1. 创建Gradle项目 新建项目选择左侧gradle,右侧选择自己jdk版本,勾选java项目,点击Next 写上GroupId组名ArtifactId项目名后点击Next 这里选择使用本地gra ...
- HDU 5506:GT and set bitset+暴力
GT and set Accepts: 35 Submissions: 194 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 655 ...
- Broadcast机制(二)
内容提纲: 在本节课当中,我会继续为大家讲解Android的广播机制,重点内容有以下的两个方面: a) 在应用程序当中注册BroadcastReceiver的方法 b) ...
- JAVA实现单例模式的四种方法和一些特点
JAVA实现单例模式的四种方法和一些特点,需要的朋友可以参考一下 一.饿汉式单例类 复制代码 代码如下: public class Singleton { private Sing ...