luoguP1036 选数 暴力AC题解
luoguP1036 选数 暴力AC题解(非正解)
俗话说得好:暴力出奇迹,打表拿省一。 对于一些暴力就能拿分的题,暴力就好啦QWQ

题目描述

输入格式

输出格式

输入输出样例

定义变量
我们令输入的第一行分别为 n , k ;
第二行的数由 a [ 25 ] 来存储。
long long n,k,a[];
题目分析
1)制作素数筛子
看完这个题之后,我们需要用到一个判断素数的筛子。可以定义一个函数,如果是素数就返回1,否则返回0.
判断一个数是不是素数的方法也有很多种。我用的属于直观判断法。
根据定义,因为质数除了1和本身之外没有其他约数。我们知道,一个数若可以进行因数分解,那么分解时得到的两个数一定是一个小于等于sqrt(n),一个大于等于sqrt(n),据此,代码中并不需要遍历到 n-1 ,遍历到 sqrt(n) 即可,因为若sqrt(n)左侧找不到约数,那么右侧也一定找不到约数。
bool prime(long long y)
{
if (y==||!y) return ;
//判断1和0的情况 for (int i=;i<=sqrt(y);i++)
if (!(y%i)) return ;
//判断 y%i 是不是=0,如果值为0说明能被整除,不是素数 return ; //遍历完之后如果没有返回0,则返回1.
}
这个“素数筛子”就做好了。
2)暴力循环
因为是判断 k 个数的和是不是素数,k的范围也不是特别大( 1 ≤ n ≤ 20 ,k < n )
所以,我们可以用20个 if ,从k=1开始暴力,一直到k=20。在暴力的过程中用一个计数器( tt ) ,来计算是素数的个数。
long long tt=;
暴力也要有方法,不能无脑暴力,不然喜提TLE……
k=1时:
只需遍历一遍所有的数,看看它本身是不是素数。
此时用到了我们刚才制作的素数筛子。
分析一下:如果 a [ i ] 为素数,那么prime ( a [ i ] ) 的值就为1,if 满足条件,执行下面的 tt++ 。
相反的,如果 a [ i ] 不是素数,那么prime ( a [ i ] ) 的值就为0,if 不满足条件,什么都不执行,继续 for 循环直到 i>n。
if(k==)
for(int i=;i<=n;++i)
{
if(prime(a[i]))
tt++;
}
k=2时:
这时 a数组 有2个数组成最终要进行判断的数,我们可以用2层循环,把所有可能的情况都遍历一遍(暴力枚举),如果这两个数的和为素数,计数器+1.
注意:此时第二层循环的变量为第一次循环变量值+1.( int b = i + 1 , ……那里)这样可以防止出现重复判断的情况,节省了一半的时间。
另外,判断素数时,prime 括号内的部分为 a [ i ] 与 a [ b ] 之和。
if(k==)
for(int i=;i<=n;++i)
for(int b=i+;b<=n;++b)
{
if(prime(a[i]+a[b]))
tt++;
}
k=3时:
同理。3个数相加,遍历一遍,不要忘记下层循环为上层+1.
在判断素数的时候也不要忘记 prime ( a [ i ] + a [ b ] + a [ c ] )。
if(k==)
for(int i=;i<=n;++i)
for(int b=i+;b<=n;++b)
for(int c=b+;c<=n;++c)
{
if(prime(a[i]+a[b]+a[c]))
tt++;
}
对!就这样!一鼓作气!打出20个 if 吧!……
AC 代码
链接:https://www.luogu.com.cn/record/35531313

瞧瞧这速度!(我想大概 也许可能 是数据有水分)
/*---------------------------------
*Title number: luoguP1036 选数
*Creation date: 2020-07-22 afternoon
*Author: EdisonBa
*-------------------------------*/
#define fastcall __attribute__((optimize("-O3")))
#pragma GCC optimize(2)
#include<iostream>
#include<cstdio>
#include<string>
#include<cstdlib>
#include<cmath>
#include<stack>
#include<cstring>
#include<iomanip>
#include<algorithm>
#include<map>
#define ll long long
#define itn int
using namespace std; ll n,k,a[],tt=; bool prime(long long y)
{
if (y==||!y) return ;
for (int i=;i<=sqrt(y);i++)
if (!(y%i)) return ;
return ;
} int main()
{
cin>>n>>k;
for(int i=;i<=n;++i)
{
cin>>a[i];
} if(k==)
{
for(int i=;i<=n;++i)
{
if(prime(a[i]))
tt++;
}
}
if(k==)
{
for(int i=;i<=n;++i)
for(int b=i+;b<=n;++b)
{
if(prime(a[i]+a[b]))
tt++;
}
}
if(k==)
{
for(int i=;i<=n;++i)
for(int b=i+;b<=n;++b)
for(int c=b+;c<=n;++c)
{
if(prime(a[i]+a[b]+a[c]))
tt++;
}
}
if(k==)
{
for(int i=;i<=n;++i)
for(int b=i+;b<=n;++b)
for(int c=b+;c<=n;++c)
for(int d=c+;d<=n;++d)
{
if(prime(a[i]+a[b]+a[c]+a[d]))
tt++;
}
}
if(k==)
{
for(int i=;i<=n;++i)
for(int b=i+;b<=n;++b)
for(int c=b+;c<=n;++c)
for(int d=c+;d<=n;++d)
for(int e=d+;e<=n;++e)
{
if(prime(a[i]+a[b]+a[c]+a[d]+a[e]))
tt++;
}
}
if(k==)
{
for(int i=;i<=n;++i)
for(int b=i+;b<=n;++b)
for(int c=b+;c<=n;++c)
for(int d=c+;d<=n;++d)
for(int e=d+;e<=n;++e)
for(int f=e+;f<=n;++f)
{
if(prime(a[i]+a[b]+a[c]+a[d]+a[e]+a[f]))
tt++;
}
}
if(k==)
{
for(int i=;i<=n;++i)
for(int b=i+;b<=n;++b)
for(int c=b+;c<=n;++c)
for(int d=c+;d<=n;++d)
for(int e=d+;e<=n;++e)
for(int f=e+;f<=n;++f)
for(int g=f+;g<=n;++g)
{
if(prime(a[i]+a[b]+a[c]+a[d]+a[e]+a[f]+a[g]))
tt++;
}
}
if(k==)
{
for(int i=;i<=n;++i)
for(int b=i+;b<=n;++b)
for(int c=b+;c<=n;++c)
for(int d=c+;d<=n;++d)
for(int e=d+;e<=n;++e)
for(int f=e+;f<=n;++f)
for(int g=f+;g<=n;++g)
for(int h=g+;h<=n;++h)
{
if(prime(a[i]+a[b]+a[c]+a[d]+a[e]+a[f]+a[g]+a[h]))
tt++;
}
}
if(k==)
{
for(int i=;i<=n;++i)
for(int b=i+;b<=n;++b)
for(int c=b+;c<=n;++c)
for(int d=c+;d<=n;++d)
for(int e=d+;e<=n;++e)
for(int f=e+;f<=n;++f)
for(int g=f+;g<=n;++g)
for(int h=g+;h<=n;++h)
for(int o=h+;o<=n;++o)
{
if(prime(a[i]+a[b]+a[c]+a[d]+a[e]+a[f]+a[g]+a[h]+a[o]))
tt++;
}
}
if(k==)
{
for(int i=;i<=n;++i)
for(int b=i+;b<=n;++b)
for(int c=b+;c<=n;++c)
for(int d=c+;d<=n;++d)
for(int e=d+;e<=n;++e)
for(int f=e+;f<=n;++f)
for(int g=f+;g<=n;++g)
for(int h=g+;h<=n;++h)
for(int o=h+;o<=n;++o)
for(int p=o+;p<=n;++p)
{
if(prime(a[i]+a[b]+a[c]+a[d]+a[e]+a[f]+a[g]+a[h]+a[o]
+a[p]))
tt++;
}
}
if(k==)
{
for(int i=;i<=n;++i)
for(int b=i+;b<=n;++b)
for(int c=b+;c<=n;++c)
for(int d=c+;d<=n;++d)
for(int e=d+;e<=n;++e)
for(int f=e+;f<=n;++f)
for(int g=f+;g<=n;++g)
for(int h=g+;h<=n;++h)
for(int o=h+;o<=n;++o)
for(int p=o+;p<=n;++p)
for(int q=p+;q<=n;++q)
{
if(prime(a[i]+a[b]+a[c]+a[d]+a[e]+a[f]+a[g]+a[h]+a[o]
+a[p]+a[q]))
tt++;
}
}
if(k==)
{
for(int i=;i<=n;++i)
for(int b=i+;b<=n;++b)
for(int c=b+;c<=n;++c)
for(int d=c+;d<=n;++d)
for(int e=d+;e<=n;++e)
for(int f=e+;f<=n;++f)
for(int g=f+;g<=n;++g)
for(int h=g+;h<=n;++h)
for(int o=h+;o<=n;++o)
for(int p=o+;p<=n;++p)
for(int q=p+;q<=n;++q)
for(int r=q+;r<=n;++r)
{
if(prime(a[i]+a[b]+a[c]+a[d]+a[e]+a[f]+a[g]+a[h]+a[o]
+a[p]+a[q]+a[r]))
tt++;
}
}
if(k==)
{
for(int i=;i<=n;++i)
for(int b=i+;b<=n;++b)
for(int c=b+;c<=n;++c)
for(int d=c+;d<=n;++d)
for(int e=d+;e<=n;++e)
for(int f=e+;f<=n;++f)
for(int g=f+;g<=n;++g)
for(int h=g+;h<=n;++h)
for(int o=h+;o<=n;++o)
for(int p=o+;p<=n;++p)
for(int q=p+;q<=n;++q)
for(int r=q+;r<=n;++r)
for(int s=r+;s<=n;++s)
{
if(prime(a[i]+a[b]+a[c]+a[d]+a[e]+a[f]+a[g]+a[h]+a[o]
+a[p]+a[q]+a[r]+a[s]))
tt++;
}
}
if(k==)
{
for(int i=;i<=n;++i)
for(int b=i+;b<=n;++b)
for(int c=b+;c<=n;++c)
for(int d=c+;d<=n;++d)
for(int e=d+;e<=n;++e)
for(int f=e+;f<=n;++f)
for(int g=f+;g<=n;++g)
for(int h=g+;h<=n;++h)
for(int o=h+;o<=n;++o)
for(int p=o+;p<=n;++p)
for(int q=p+;q<=n;++q)
for(int r=q+;r<=n;++r)
for(int s=r+;s<=n;++s)
for(int t=s+;t<=n;++t)
{
if(prime(a[i]+a[b]+a[c]+a[d]+a[e]+a[f]+a[g]+a[h]+a[o]
+a[p]+a[q]+a[r]+a[s]+a[t]))
tt++;
}
}
if(k==)
{
for(int i=;i<=n;++i)
for(int b=i+;b<=n;++b)
for(int c=b+;c<=n;++c)
for(int d=c+;d<=n;++d)
for(int e=d+;e<=n;++e)
for(int f=e+;f<=n;++f)
for(int g=f+;g<=n;++g)
for(int h=g+;h<=n;++h)
for(int o=h+;o<=n;++o)
for(int p=o+;p<=n;++p)
for(int q=p+;q<=n;++q)
for(int r=q+;r<=n;++r)
for(int s=r+;s<=n;++s)
for(int t=s+;t<=n;++t)
for(int u=t+;u<=n;++u)
{
if(prime(a[i]+a[b]+a[c]+a[d]+a[e]+a[f]+a[g]+a[h]+a[o]
+a[p]+a[q]+a[r]+a[s]+a[t]+a[u]))
tt++;
}
}
if(k==)
{
for(int i=;i<=n;++i)
for(int b=i+;b<=n;++b)
for(int c=b+;c<=n;++c)
for(int d=c+;d<=n;++d)
for(int e=d+;e<=n;++e)
for(int f=e+;f<=n;++f)
for(int g=f+;g<=n;++g)
for(int h=g+;h<=n;++h)
for(int o=h+;o<=n;++o)
for(int p=o+;p<=n;++p)
for(int q=p+;q<=n;++q)
for(int r=q+;r<=n;++r)
for(int s=r+;s<=n;++s)
for(int t=s+;t<=n;++t)
for(int u=t+;u<=n;++u)
for(int v=u+;v<=n;++v)
{
if(prime(a[i]+a[b]+a[c]+a[d]+a[e]+a[f]+a[g]+a[h]+a[o]
+a[p]+a[q]+a[r]+a[s]+a[t]+a[u]+a[v]))
tt++;
}
}
if(k==)
{
for(int i=;i<=n;++i)
for(int b=i+;b<=n;++b)
for(int c=b+;c<=n;++c)
for(int d=c+;d<=n;++d)
for(int e=d+;e<=n;++e)
for(int f=e+;f<=n;++f)
for(int g=f+;g<=n;++g)
for(int h=g+;h<=n;++h)
for(int o=h+;o<=n;++o)
for(int p=o+;p<=n;++p)
for(int q=p+;q<=n;++q)
for(int r=q+;r<=n;++r)
for(int s=r+;s<=n;++s)
for(int t=s+;t<=n;++t)
for(int u=t+;u<=n;++u)
for(int v=u+;v<=n;++v)
for(int w=v+;w<=n;++w)
{
if(prime(a[i]+a[b]+a[c]+a[d]+a[e]+a[f]+a[g]+a[h]+a[o]
+a[p]+a[q]+a[r]+a[s]+a[t]+a[u]+a[v]+a[w]))
tt++;
}
}
if(k==)
{
for(int i=;i<=n;++i)
for(int b=i+;b<=n;++b)
for(int c=b+;c<=n;++c)
for(int d=c+;d<=n;++d)
for(int e=d+;e<=n;++e)
for(int f=e+;f<=n;++f)
for(int g=f+;g<=n;++g)
for(int h=g+;h<=n;++h)
for(int o=h+;o<=n;++o)
for(int p=o+;p<=n;++p)
for(int q=p+;q<=n;++q)
for(int r=q+;r<=n;++r)
for(int s=r+;s<=n;++s)
for(int t=s+;t<=n;++t)
for(int u=t+;u<=n;++u)
for(int v=u+;v<=n;++v)
for(int w=v+;w<=n;++w)
for(int x=w+;x<=n;++x)
{
if(prime(a[i]+a[b]+a[c]+a[d]+a[e]+a[f]+a[g]+a[h]+a[o]
+a[p]+a[q]+a[r]+a[s]+a[t]+a[u]+a[v]+a[w]+a[x]))
tt++;
}
}
if(k==)
{
for(int i=;i<=n;++i)
for(int b=i+;b<=n;++b)
for(int c=b+;c<=n;++c)
for(int d=c+;d<=n;++d)
for(int e=d+;e<=n;++e)
for(int f=e+;f<=n;++f)
for(int g=f+;g<=n;++g)
for(int h=g+;h<=n;++h)
for(int o=h+;o<=n;++o)
for(int p=o+;p<=n;++p)
for(int q=p+;q<=n;++q)
for(int r=q+;r<=n;++r)
for(int s=r+;s<=n;++s)
for(int t=s+;t<=n;++t)
for(int u=t+;u<=n;++u)
for(int v=u+;v<=n;++v)
for(int w=v+;w<=n;++w)
for(int x=w+;x<=n;++x)
for(int y=x+;y<=n;++y)
{
if(prime(a[i]+a[b]+a[c]+a[d]+a[e]+a[f]+a[g]+a[h]+a[o]
+a[p]+a[q]+a[r]+a[s]+a[t]+a[u]+a[v]+a[w]+a[x]+a[y]))
tt++;
}
}
if(k==)
{
for(int i=;i<=n;++i)
for(int b=i+;b<=n;++b)
for(int c=b+;c<=n;++c)
for(int d=c+;d<=n;++d)
for(int e=d+;e<=n;++e)
for(int f=e+;f<=n;++f)
for(int g=f+;g<=n;++g)
for(int h=g+;h<=n;++h)
for(int o=h+;o<=n;++o)
for(int p=o+;p<=n;++p)
for(int q=p+;q<=n;++q)
for(int r=q+;r<=n;++r)
for(int s=r+;s<=n;++s)
for(int t=s+;t<=n;++t)
for(int u=t+;u<=n;++u)
for(int v=u+;v<=n;++v)
for(int w=v+;w<=n;++w)
for(int x=w+;x<=n;++x)
for(int y=x+;y<=n;++y)
for(int z=y+;z<=n;++z) {
if(prime(a[i]+a[b]+a[c]+a[d]+a[e]+a[f]+a[g]+a[h]+a[o]
+a[p]+a[q]+a[r]+a[s]+a[t]+a[u]+a[v]+a[w]+a[x]+a[y]+a[z]))
tt++;
}
}
cout<<tt<<endl;
return ;
114514 }
这是本蒟蒻发表的第二篇题解,继承了第一篇题解的暴力传统。
这是一道橙题,我觉得打这个暴力对付它来说有点小亏。
不过也顺便锻炼了一下自己的耐力和代码能力
既然您认真地看完了,点个关注,推荐一下不香嘛!~
谢谢您的支持!
2020.7.22
EdisonBa
luoguP1036 选数 暴力AC题解的更多相关文章
- 7.20试机测 T3 阶乘之和 暴力AC题解
7.20试机测 T3 阶乘之和 暴力AC题解 题外话:此乃本蒟蒻发表的第一篇题解,大家多多关照,支持一下,谢谢 题面 3.阶乘之和(sum.pas/in/out) 问题描述: 给定一个非负整数 n, ...
- 【洛谷】P1308 统计单词数-全AC题解(易理解
弟弟的混乱代码(易理解 大概 思路: 循环b(被找的字符串),遇空格比较两空格间的长度是否与a(需要查找的字符)相等:不相等继续循环:相等比较内容是否相同(倒数比较,不一样直接退出 ,直到比较到第一个 ...
- NOIP 2002提高组 选数 dfs/暴力
1008 选数 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 已知 n 个整数 x1,x2,…, ...
- BZOJ 3930: [CQOI2015]选数 递推
3930: [CQOI2015]选数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pro ...
- 【BZOJ3530】数数(AC自动机,动态规划)
[BZOJ3530]数数(AC自动机,动态规划) 题面 BZOJ 题解 很套路的\(AC\)自动机+\(DP\) 首先,如果长度小于\(N\) 就不存在任何限制 直接大力\(DP\) 然后强制限制不能 ...
- 【BZOJ3930】选数(莫比乌斯反演,杜教筛)
[BZOJ3930]选数(莫比乌斯反演,杜教筛) 题面 给定\(n,K,L,R\) 问从\(L-R\)中选出\(n\)个数,使得他们\(gcd=K\)的方案数 题解 这样想,既然\(gcd=K\),首 ...
- 【BZOJ2734】【HNOI2012】集合选数(状态压缩,动态规划)
[BZOJ2734][HNOI2012]集合选数(状态压缩,动态规划) 题面 Description <集合论与图论>这门课程有一道作业题,要求同学们求出{1, 2, 3, 4, 5}的所 ...
- 洛谷 [CQOI2015]选数 解题报告
[CQOI2015]选数 题目描述 我们知道,从区间\([L,H]\)(\(L\)和\(H\)为整数)中选取\(N\)个整数,总共有\((H-L+1)^N\)种方案. 小\(z\)很好奇这样选出的数的 ...
- 【BZOJ3930】[CQOI2015]选数 莫比乌斯反演
[BZOJ3930][CQOI2015]选数 Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律 ...
随机推荐
- JavaWeb网上图书商城完整项目--27.注册页面之注册按钮图片切换实现
我们要实现立即注册这个按钮,光标获得焦点是一张图片,光标失去焦点的时候是另外一张图片 我们需要在文档加载完成之后,设置该事件hover事件 hover(over,out)这是jQuery的一个模仿悬停 ...
- webpack4.*入门笔记
全是跟着示例做的.看下面文章 入门 1.nodejs基础 http://www.runoob.com/nodejs/nodejs-tutorial.html 2.NPM 学习笔记整理 https:// ...
- P5676 [GZOI2017]小z玩游戏【Tarjan】
小z玩游戏 Tarjan算是板子题吧,但是要稍微做一些修改,建边需要多考虑,建立"虚点". 题目描述 小 z 很无聊. 小 z 要玩游戏. 小 z 有\(N\)个新游戏,第\(i\ ...
- Nginx 从入门到放弃(五)
nginx的rewrite重写 nginx具有将一个路由经过加工变形成另外一个路由的功能,这就叫做重写. 重写中用到的指令 if (条件) {} 设定条件,再进行重写 set # 设定变量 retur ...
- 聊聊Java中的异常及处理
前言 在编程中异常报错是不可避免的.特别是在学习某个语言初期,看到异常报错就抓耳挠腮,常常开玩笑说编程1分钟,改bug1小时.今天就让我们来看看什么是异常和怎么合理的处理异常吧! 异常与error介绍 ...
- Blazor带我重玩前端(二)
概览 Blazor目前有两种托管模式,一种是Server-Side模式,一种是WebAssembly模式.官方首先支持的是Service-Side模式,使用WebAssembly模式,需要更新到最新版 ...
- 状压DP之互不侵犯
题目描述 这里 在\(N*N\) 的棋盘里面放\(k\)个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 输入格式 只有 ...
- When Lambo with Howdoo
原文链接:https://howdoo.io/when-lambo/ 为了庆祝即将推出的革命性新社交媒体平台Howdoo以及我们令人惊喜的合作伙伴关系和社区,我们正在发起一项竞赛,以最终回答“When ...
- 二分查找&二叉排序树
首先我们先来复习一下二分查找的算法 对于正向序列的二分查找 递归实现: bool binary_search(vector<int> &sort_arry,int begin,in ...
- web常用的unicode字符集
也不知道出处