首页 > 其他分享 >5.30 模拟赛小记

5.30 模拟赛小记

时间:2023-05-30 22:57:19浏览次数:44  
标签:约数 int scanf long 5.30 main ll 模拟 小记

A. 求 1 - N 每个数的约数集合

求 1 - N 每个数字约数集合,显然用试除法不合适,在这里用倍数法。对于每个数字找到范围内它的倍数,则这个倍数就可以标记约数了。

但是这是 syoj,作为一个成熟的 oier,你要学会高效输出,指本题卡 scanf,需要优化输出,否则你只能得到 40pts 的好成绩。

对了今天的又一经验教训:最好别用 define int long long,最好别乱开 long long,否则你会变得不幸。

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int n;
vector<int> ys[N];
int main()
{
    scanf("%d", &n);
    for(int i = 1; i <= n; i ++ )
    for(int j = 1; j <= n / i; j ++ ) ys[i * j].push_back(i);
    for(int i = 1; i <= n; i ++ )
    {
        for(int j = 0; j < ys[i].size(); j ++ ) printf("%d ", ys[i][j]);
        puts("");
    }
}

 

B.求 N 的约数的个数、所有约数的和。

本题数据比较水所以就偷了个懒:用试除法暴力求约数。时间复杂度是 $\sqrt(N)$。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e7 + 10;
int tot;
ll n, ans;
ll ys[N];
int main()
{
  scanf("%lld", &n);
  for(int i = 1; i <= n / i; i ++ )
  {
    if(n % i == 0)
    {
      ys[++ tot] = i;
      if(n / i != i) ys[++ tot] = n / i;
    }
  }
  for(int i = 1; i <= tot; i ++ ) ans += ys[i];
  printf("%lld\n%lld", tot, ans);
}

 

C.求 1 ~ N 每个数的约数个数之和

如果你还像 B 一样试除法,你会得到 40pts 的好成绩;

如果你发现:对于约数 i,1 - N 中共有 $\lfloor n / i \rfloor$ 个约数,那么容易得到式子:$ ans = \sum _ {i = 1} ^ n \lfloor n / i \rfloor$

据此,你可以 $O(n)$ 求解该问题,能得到 60pts 的好成绩。

此时,通过打表,我们发现还可以优化。可以发现 $\lfloor n / i \rfloor$ 有很多都是一样的,于是累计过程中可以找出来相同的一段一起加:(n / (n / i) - i + 1) * (n / i)。复杂度 $O(2 \sqrt{N})$ 。

#include<cstdio>
#define int long long
int n, ans;
signed main()
{
  scanf("%lld",&n);
  for(int i = 1, j; i <= n; i = j + 1)
  {
    j = n / (n / i);
    ans += (n / i) * (j - i + 1);
  }
  printf("%lld", ans);
}

 

以及,在洛谷题解里看到说本题还可以 $O(n ^ \frac{1} {3}$ $log$ $n)$ 解决,不过那就是黑题了。指路

洛谷原题

 

标签:约数,int,scanf,long,5.30,main,ll,模拟,小记
From: https://www.cnblogs.com/Moyyer-suiy/p/17444736.html

相关文章

  • 5.30 吐槽
    我,可能无法毕业了今晚和智垚聊了很多他问我:你为毕设花了多少钱?有没有购买过代码?我:没有他问我:你这四年有没有做过什么大型项目?我:没有他问我:你有没有使用ai我说:claude他说:我使用过了,它经常说胡话,还是要靠官网他和我说:你现在的进度就好像我上学期刚开学我可能无法毕业了。......
  • 5.30每日总结
    <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><%@pageimport="java.sql.*"%><!DOCTYPEhtml><html><head><metacharset="UTF-8"......
  • m一级倒立摆的动态模拟和零极点配置控制器matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:   2.算法涉及理论知识概要       倒立摆是一个开环不稳定的强非线性系统,其控制策略与杂技运动员顶杆平衡表演的技巧有异曲同工之处,目的在于使得摆杆处于临界稳定状态,是进行控制理论研究的典型实验平台。20世纪50年代,麻省......
  • 2023.5.30每日总结
    publicexamination[]sortAll2()throwsException{Stringsql="selectcount(*)fromexaminationwheregrade<60";PreparedStatementpre=connect.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ......
  • 每日总结-23.5.30
    <%@pageimport="wangzhan.Thesql"%><%@pageimport="wangzhan.Pd_P_assignment"%><%@pageimport="wangzhan.Pd_S_assignment"%><%@pagelanguage="java"contentType="text/html;charset=UTF......
  • 2023.5.30《人件》阅读笔记
    第三章——软件工程师的成长考级之路:在中国,软件工程师的职业资格考试有:计算机等级考试和全国计算机技术与软件专业技术资格考试。很多公司也提供了针对自己产品的职业认证项目。例如:微软公司有微软认证专家甲骨文公司有Oracle认证项目。本章主要讲了,不同级别的......
  • 5.30 总结
    今天复习了数据库的sql查询以及其他的一些知识点。学会了怎样进行多表查询以及怎样创建视图。我在数据库保护性的章节里学到了锁的机制:所分为两种(1.排他锁2.共享锁)了解到大多数程序中用到的都是两段锁协议来保护程序数据的真实性。......
  • 2023.5.30——软件工程站立会议(阶段二)
    站立会议内容:1.整个项目预期的任务量:目前已经花的时间:剩余的时间:2.任务看板照片: 3.团队照片: 4.产品状态:最新做好的功能:正在完成中5.燃尽图:......
  • 2023.5.30——软件工程日报
    所花时间(包括上课):6h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习。我了解到的知识点:1.了解了一些数据库的知识;2.了解了一些python的知识;3.了解了一些英语知识;5.了解了一些Javaweb的知识;4.了解了一些数学建模的知识;6.了解了一些计算机网络的知识;......
  • 简单的模拟
    开始普及组的训练!所谓模拟,就是直接根据题意编写,思维难度简单。P1003P1067P1540P1056P1328P1563......