XXY 的 的 NOIP 模拟赛 4 4 —— 数学专场

A

Description
定义 f(x)表示 x 的约数和,例:f(12)=1+2+3+4+6+12=28
给出 x,y,求Σf(i),i∈[x,y]
Input
一行两个整数 x,y
Output
一行表示答案
Example
两组输入数据
2 4
123 321
对应输出
14
72543
Hint
对于 20%的数据,1<=x<=y<=1000
对于 40%的数据,1<=x<=y<=1e7
对于 100%的数据,1<=x<=y<=2e9

#include<iostream>
#include<cstdio>
using namespace std;
long long x,y;
long long count(int x){
long long res=;
long long l=,r;
while(){
r=x/(x/l);
long long a=x/l;
res+=((l+r)*(r-l+)/)*a;
l=r+;
if(x/l==)break;
}
return res;
}
int main(){
freopen("A.in","r",stdin);
freopen("A.out","w",stdout);
cin>>x>>y;
long long ansl=count(x-);
long long ansr=count(y);
cout<<ansr-ansl;
}

90分 出现整数被0除的错误

#include<iostream>
#include<cstdio>
using namespace std;
long long x,y;
long long count(int x){
long long res=;
long long l=,r;
while(){
if(x/l==)r=x;
else r=x/(x/l);
long long a=x/l;
res+=((l+r)*(r-l+)/)*a;
l=r+;
if(x/l==)break;
}
return res;
}
int main(){
freopen("A.in","r",stdin);
freopen("A.out","w",stdout);
cin>>x>>y;
long long ansl=count(x-);
long long ansr=count(y);
cout<<ansr-ansl;
}

100分

B

Description
求满足以下条件的 x 的个数
① x∈[1,n!]
② 设 pi 为质数且 pi|x,那么 pi>m,对于所有的 pi 均成立
答案对 100000007 取模
Input
一行两个整数 n,m
Output
一行表示答案
Example
3 组输入样例
100 10
100 20
10000 9000
Output
对应 3 组输出
43274465
70342844
39714141
Hint
对于 20%的数据,n,m<=8
对于 60%的数据,n<=100000,m<=8
对于 100%的数据,n<=10000000,保证 n-m<=100000,m<=n

学到的一点东西

1.x的所有素因子大于m,则x与m!互素
2.已知phi[(i-1)!],递推地求phi[i!]
  如果i是素数,phi[i!]=phi[(i-1)!]*(i-1)
  如果i不是素数,phi[i!]=phi[(i-1)!]*i

3.phi[n!]=phi[m!]*(n!/m!)

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int p[],n,m,w=,ans,cnt;
bool vis[],q[];
void dfs(int pos,long long sum){
if(sum>w)return;
if(!q[sum]&&sum!=)ans++,q[sum]=;
//cout<<sum<<' ';
for(int i=pos;i<=cnt;i++){
if(sum*p[i]>w)return;
dfs(i,sum*p[i]);
}
}
int main(){
//freopen("Cola.txt","r",stdin);
freopen("B.in","r",stdin);
freopen("B.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)w*=i;
for(int i=;i<=w;i++){
if(!vis[i])p[++cnt]=i;
for(int j=;j<=cnt&&i*p[j]<=w;j++){
vis[i*p[j]]=;
if(i%p[j]==)break;
}
}
int pos=upper_bound(p+,p+cnt+,m)-p;
dfs(pos,);
for(int i=pos;i<=cnt;i++){
if(cnt>w)break;
if(!q[p[i]])ans++;
}
cout<<ans;
}

20分 暴力

#include<cstdio>
#define N 10000001
#define mod 100000007
using namespace std;
int cnt,p[],phi[N];
long long phifac[N];
bool v[N];
int main()
{
freopen("B.in","r",stdin);
freopen("B.out","w",stdout);
phi[]=;
for(int i=;i<N;i++)
{
if(!v[i])
{
p[++cnt]=i;
phi[i]=i-;
}
for(int j=;j<=cnt;j++)
{
if(i*p[j]>=N) break;
v[i*p[j]]=true;
if(i%p[j]) phi[i*p[j]]=phi[i]*(p[j]-);
else
{
phi[i*p[j]]=phi[i]*p[j];
break;
}
}
}
int n,m; long long ans;
scanf("%d%d",&n,&m);
ans=;
phifac[]=;
for(int i=;i<=m;i++)
if(!v[i]) phifac[i]=phifac[i-]*(i-)%mod;
else phifac[i]=phifac[i-]*i%mod;
ans=phifac[m];
for(int i=m+;i<=n;i++) ans=ans*i%mod;
printf("%I64d\n",ans-);
}

100分

C

Description
令 f(k)=n 表示 有 n 种方式,可以把正整数 k 表示成几个素数的乘积的形式。
例 10=2*5=5*2,所以 f(10)=2
给出 n,求最小的 k
Input
一行一个整数 n
Output
一行表示答案
Example
四组输入样例
1
2
3
105
对应输出:
2
6
12
720
Hint
20%的数据,k<=20
另外 20%的数据,n<=20
另外 20%的数据,k<=1e6
100%的数据,k,n<=2^60

#include<iostream>
#include<cstdio>
using namespace std;
long long a[];
int k,n,bin[],p[],cnt;
bool vis[];
bool check(int x){
int l=,pos=;
while(x!=){
while(x%p[pos]!=)pos++;
l=l+;
bin[l]=;
while(x%p[pos]==){
bin[l]++;
x=x/p[pos];
}
}
long long res=;
int sum=;
for(int i=;i<=l;i++)sum+=bin[i];
res=a[sum];
for(int i=;i<=l;i++)res/=a[bin[i]];
if(res==n)return ;
return ;
}
int main(){
//freopen("Cola.txt","r",stdin);
freopen("C.in","r",stdin);
freopen("C.out","w",stdout);
a[]=;
for(int i=;i<=;i++)a[i]=a[i-]*i;
scanf("%d",&n);
for(int i=;i<=;i++){
if(!vis[i])p[++cnt]=i;
for(int j=;j<=cnt&&i*p[j]<=;j++){
vis[i*p[j]]=;
if(i%p[j]==)break;
}
}
for(int i=;i<=;i++){//k的所有可能值
if(check(i)){
printf("%d",i);
return ;
}
}
}

30分 暴力枚举答案

#include<cstdio>
#include<iostream>
using namespace std;
typedef long long LL;
int p[]={,,,,,,,,,,,,,,,,,,,,};
LL ans,n;
LL C[][];
void solve(int num,int lim,LL tot,LL now,int last)
{
if(now>ans) return;
if(tot==n) { ans=now; return ; }
if(tot>n || num>) return;
LL t=;
for(int i=;i<=lim;i++)
{
t*=p[num];
if(now>=ans/t) return;
solve(num+,i,tot*C[last+i][i],now*t,last+i);
}
}
int main()
{
freopen("C.in","r",stdin);
freopen("C.out","w",stdout);
C[][]=;
for(int i=;i<;i++)
{
C[i][]=;
for(int j=;j<=i;j++)
C[i][j]=C[i-][j-]+C[i-][j];
}
scanf("%I64d",&n);
if(n==)
{
printf("1 2\n");
return ;
}
ans=(LL)<<;
solve(,,,,);
printf("%I64d\n",ans);
}

100分 搜索+剪枝

2017-9-22 NOIP模拟赛[xxy][数论]的更多相关文章

  1. 2018.9.22 NOIP模拟赛

    *注意:这套题目应版权方要求,不得公示题面. 从这里开始 Problem A 妹子 Problem B 旅程 Problem C 老大 因为业务水平下滑太严重,去和高一考NOIP模拟,sad... P ...

  2. 2017.6.11 NOIP模拟赛

    题目链接: http://files.cnblogs.com/files/TheRoadToTheGold/2017-6.11NOIP%E6%A8%A1%E6%8B%9F%E8%B5%9B.zip 期 ...

  3. 2017-9-13 NOIP模拟赛[xxy]

    全排列 (permutation.cpp/c/pas)Description从 n 个不同元素中任取 m(m≤n)个元素,按照一定的顺序排列起来,叫做从 n个不同元素中取出 m 个元素的一个排列.当 ...

  4. 2017 10.25 NOIP模拟赛

    期望得分:100+40+100=240 实际得分:50+40+20=110 T1 start取了min没有用,w(゚Д゚)w    O(≧口≦)O T3 代码3个bug :数组开小了,一个细节没注意, ...

  5. 2017.5.27 NOIP模拟赛(hzwer2014-5-16 NOIP模拟赛)

    期望得分:100+100+60+30=290 实际得分:100+20+60+0=180 当务之急:提高一次正确率 Problem 1 双色球(ball.cpp/c/pas) [题目描述] 机房来了新一 ...

  6. 18.9.22 noip模拟赛

    此题为找规律.期望100 实际100 #include<cstdio> #include<cstring> #include<iostream> #include& ...

  7. 【2019.7.22 NOIP模拟赛 T1】麦克斯韦妖(demon)(质因数分解+DP)

    暴力\(DP\) 先考虑暴力\(DP\)该怎么写. 因为每个序列之后是否能加上新的节点只与其结尾有关,因此我们设\(f_i\)为以\(i\)为结尾的最长序列长度. 每次枚举一个前置状态,判断是否合法之 ...

  8. 5.22 noip模拟赛

    本来我是不想写的,无奈不会写.蒟蒻 考场就是想不出来 今天得到了100分额外水过了100分我是真的失败.还有一个根本不会check 感觉自己非常之菜. 这道题是这样的 还行吧比较有意思 首先确立一个真 ...

  9. 10.16 NOIP模拟赛

    目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...

随机推荐

  1. 【Leetcode-easy】Reverse Integer

    思路:取绝对值,反转,并判断反转的结果是否大于最大整数,需要注意的细节:判断时需要这样:result > (Integer.MAX_VALUE - v) / 10 否则result * 10 + ...

  2. react服务端渲染

    一.服务端渲染的好处 1.SEO, 让搜索引擎更容易读取页面内容: 2.首屏渲染速度更快(重点),无需等待JS文件下载执行过程: 3.更易于维护,服务端和客户端可以共享某些代码: 二.实现原理 服务端 ...

  3. GPS NMEA-0183协议介绍【转】

    本文转载自:http://blog.csdn.net/haofeng82/article/details/4439349 找到的一篇关于GPS常用的一种协议的介绍,希望对大家有用 NMEA-0183 ...

  4. Nginx之解压编译安装-yellowcong

    安装前准备 对于nginx编译安装需要先安装编译 的工具,然后再安装nginx依赖 yum -y install gcc gcc-c++ autoconf automake make yum -y i ...

  5. 城市旅游ppt模板

    城市旅游ppt模板,城市,旅游,旅行,休闲. 下载:http://www.huiyi8.com/lvyoumuban/ppt/

  6. BZOJ 1640 [Usaco2007 Nov]Best Cow Line 队列变换:贪心【字典序最小】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1640 题意: 给你一个长度为n的字符串. 你可以将原串的首字母或尾字母移动到新串的末尾. ...

  7. BZOJ_3124_[Sdoi2013]直径_树形DP

    BZOJ_3124_[Sdoi2013]直径_树形DP Description 小Q最近学习了一些图论知识.根据课本,有如下定义.树:无回路且连通的无向图,每条边都有正整数的权值来表示其长度.如果一棵 ...

  8. 多线程之:java的CAS操作的相关信息

    一:锁机制存在的性能问题? 在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁(后面的章节还会谈到锁). 锁机制存在以下问题:(1)在多线程竞争下,加锁.释放锁会导 ...

  9. N1游记

    考试一年前:要认真学文化课,所以还是别报七月的了吧,等到年底就该稳了. 考试半年前:虽然暑假没学,但是到了年底就该稳了. 考试一个月前:我咋还要考N1,算了不管了,到时候再说吧. 考试一周前:我一定要 ...

  10. 【Python】数组排序

    1.numpy库:argsort() argsort函数返回的是数组值从小到大的索引值(升序排列) 一维: In [1]: import numpy as np In [2]: x = np.arra ...