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. [2018-05-27]配置VSTS认证方式使用Personal Access Token

    本文介绍下如何配置VSTS(visual studio team service,其实就是微软SaaS版的TFS)通过Personal Access Token访问其下的Git代码库. 问题 使用gi ...

  2. 使用Spring AOP实现MySQL数据库读写分离案例分析

    一.前言 分布式环境下数据库的读写分离策略是解决数据库读写性能瓶颈的一个关键解决方案,更是最大限度了提高了应用中读取 (Read)数据的速度和并发量. 在进行数据库读写分离的时候,我们首先要进行数据库 ...

  3. turbolink 造成 link_to异常

    link_to  点击之后不刷新不加载文件 send_file 只能在浏览器中打开,而不能下载 解决方法:注释gem turbolink,application.js 中移除turbolink

  4. HDU - 1241 Oil Deposits 【DFS】

    题目链接 https://cn.vjudge.net/contest/65959#problem/L 题意 @表示油田 如果 @@是连在一起的 可以八个方向相连 那么它们就是 一块油田 要找出 一共有 ...

  5. java.lang.UnsupportedClassVersionError: com/dw/Function : Unsupported major.minor version 52.0

    本地环境中有jdk7和jdk8,当把jdk8改为jdk7时,出现如下错误,是jdk版本的问题,在Properties-->JAVA Compiler-中的Compiler compliance ...

  6. 磁卡ID卡IC卡的区别【转】

    本文转载自:https://blog.csdn.net/trap94/article/details/50614451 今天被一个朋友问到ID卡和IC卡有什么区别,还真给问住了.虽然平时经常用到这些卡 ...

  7. python的join()函数

    def join(self, iterable): # real signature unknown; restored from __doc__ """ S.join( ...

  8. laravel基础课程---4、Laravel基础网站结构搭建

    laravel基础课程---4.Laravel基础网站结构搭建 一.总结 一句话总结: 1.搭建网站前后台路由:在路由组Route::group()中设置好命名空间和前缀 2.搭建控制器:比如1)新建 ...

  9. 第三届蓝桥杯决赛c++b组

    1.星期几 [结果填空] (满分5分)     1949年的国庆节(10月1日)是星期六.      今年(2012)的国庆节是星期一.     那么,从建国到现在,有几次国庆节正好是星期日呢? 只要 ...

  10. 在node.js中建立你的第一个HTTp服务器

    这一章节我们将从初学者的角度介绍如何建立一个简单的node.js HTTP 服务器 创建myFirstHTTPServer.js //Lets require/import the HTTP modu ...