辣些数论的思维题(枯了)

BZOJ 2659 算不出的算式

  • 关键是要想到这两个式子的几何意义。
  • 然后如图,以p1=5,p2=3为例子,整个矩形一定是被均分了的。
  • 如上图,单看每一列,绿点把红点分为上下两部分,绿点的位置又是中心对称的,所以整个红点(除了在对角线上的)都被等分到上三角和下三角了。
  • 由于p,q都是质数所以对角线上是不会有整点哒
  • 当p,q相等时,式子变成[1/p] + [2/p] + ... + [ ((p-1)/2) /p ]
  • 由 [ (x+n*p) / p ] =n   (x<p)  可知上面的是个有规律的数列。
  • 代码:
  •  1 #include <bits/stdc++.h>
     2  
     3 using namespace std;
     4 typedef unsigned long long ull;
     5  
     6 int main(){
     7     ull p,q,ans;
     8     cin>>p>>q;
     9     if(p==q) {
    10         ull k=(q-1)/2;  //1+...+k
    11         ans=(1+k)*k/2;
    12         cout<<ans*2<<endl;
    13         return 0;
    14     }
    15     ans=(p+1)*(q+1)/4;
    16     ans-=((p+1)/2+(q+1)/2);
    17     cout<<ans+1<<endl;
    18     return 0;
    19 }
    20
    quq

     

洛谷P3951 NOIP2017 小凯的疑惑

  • 倒回去看那年的题,所以为什么会爆0,三十分都没有啊(╯‵□′)╯︵┻━┻
  • 拿三和五为例子,考虑数轴
  • 这些是三的倍数能指着的点,可以看出所有的数里每三个数就有一个能被表示。
  • 现在看加上5的情况
  • 这里由于第一个5在三的后面两位,一直倍数下去,这样所有的数每三个数就有两个能被表示
  • 而第二个5,就是10正好踩到后面一位,这样这之后的每三个数的这一位一定能被表示
  • 这样就能表示完那后面所有的数了。
  • 所以任意两个p,q(互质)的情况是一样的,不妨假设p<q
  • q%p
  • 2*q%p
  • 3*q%p
  • ......
  • (p-1)*q%p
  • 可以知道上面这些的结果一定都不一样,(如果一样,那就一定有p是q的因数,这与他俩互质矛盾)
  • 所以在p*q之前q之间的空挡一定被q踩完,这之后的任意数都能被表示
  • 那第一个不能被表示的数呢?
  • 我们知道最后一个被踩的空挡是(p*q)-q,在这个空档之前的这个空挡都是踩不到的,所以就在它前一个就是最大的无法表示的数了,即为p*q-p-q
  • 代码:
     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 typedef long long ll;
     5 
     6 int main(){
     7     ll a,b; //a>b
     8     cin>>a>>b;
     9     cout<<(a*b)-a-b<<endl;
    10     return 0;
    11 }
    嘤击长空

BZOJ1008: [HNOI2008]越狱

  • 考虑不发生越狱的情况,m* ( m-1 )^(n-1)
  • 全部情况:m^n
  • 快速幂
  • 代码:
     1 #include <bits/stdc++.h>
     2 #define mod 100003
     3  
     4 using namespace std;
     5 typedef long long ll;
     6 ll m,n;
     7  
     8 ll exp(ll x,ll v){
     9     if(x==1) return v;
    10     ll t=exp(x/2,v);
    11     t=(t*t)%mod;
    12     return (x%2) ? (t*v)%mod : t;
    13 }
    14  
    15 int main(){
    16     cin>>m>>n;
    17     ll a=exp(n,m),b=exp(n-1,m-1);
    18     ll ans=a-(m*b)%mod;
    19     if(ans<0) ans+=mod;
    20     cout<<ans<<endl;
    21     return 0;
    22 }
    嘤帝质疑

 

BZOJ2818: Gcd

  • 题意:给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的
    数对(x,y)有多少对.    其中1<=N<=10^7
  • 欧拉函数
  • 先枚举gcd(x,y)的值,然后再求所有这些数中有枚举的这个数的因子的数中互质的对数,后者用欧拉函数再求一个前缀和就ok了
  • 代码(注意欧拉函数求前缀和到后面会爆int,要开long long才行)
     1 #include <bits/stdc++.h>
     2  
     3 using namespace std;
     4 typedef long long ll;
     5 ll phi[10000005];
     6 int pri[10000005],table[10000005]={0};
     7 int cp=-1,n;
     8 ll ans=0;
     9  
    10 void getphi(){
    11     for (int i=2; i<=1e7; i++) {
    12         if(!table[i]) { pri[++cp]=i; phi[i]=i-1; }
    13         for (int j=0; j<=cp; j++){
    14             ll t=pri[j]*i;
    15             if(t>1e7) break;
    16             table[t]=1;
    17             if(i%pri[j]==0) { phi[t]=phi[i]*pri[j]; break;}
    18             phi[t]=phi[i]*(pri[j]-1);
    19         }
    20     }
    21 }
    22  
    23 int main(){
    24     getphi();
    25     for (int i=1; i<=1e7; i++) phi[i]+=phi[i-1];
    26     cin>>n;
    27     for (int i=0; i<=cp; i++) {
    28         if(n<pri[i]) break;
    29         ans+= (phi[ n/pri[i] ]<<1) ;
    30         ans++;
    31     }
    32     cout<<ans<<endl;
    33     return 0;
    34 }
    嘤雄不朽

 

 

BZOJ2705: [SDOI2012]Longge的问题

  • 题意: 给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N)   其中0<N<=2^32。

  • 这个题没做出来主要是因为没考虑过枚举N的因数(其实是因为我人傻)
  • 对啊根号N就可以枚举N的所有因数了何必想的辣么复杂呢
  • 代码:
     1 #include <bits/stdc++.h>
     2  
     3 using namespace std;
     4 typedef long long ll;
     5  
     6 ll phi(ll x){
     7     ll sqx=sqrt(x),tx=x;
     8     for (ll i=2; i<=sqx; i++) {
     9         if(tx%i) continue;
    10         x/=i;
    11         x*=(i-1);
    12         while(tx%i==0) tx/=i;
    13         if(tx==1) break;
    14     }
    15     if(tx>1) { x/=tx; x*=(tx-1); }
    16     return x;
    17 }
    18  
    19 int main(){
    20     ll ans=0,n;
    21     cin>>n;
    22     ll m=sqrt(n);
    23     for (int i=2; i<=m; i++) {
    24         if(n%i) continue;
    25         ans+=phi(n/i)*i;
    26         if(i*i<n) ans+=(n/i)*phi(i);
    27     }
    28     ans+=(n+phi(n));
    29     cout<<ans<<endl;
    30     return 0;
    31 }
    满门嘤烈

     

转载于:https://www.cnblogs.com/jiecaoer/p/11342238.html

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值