zoukankan      html  css  js  c++  java
  • 数论比赛

    Problem A Play with Floor and Ceil http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=18&page=show_problem&problem=1614

    扩展gcd求解2元不定式 ax+by=c    d=gcd(a,b)=ax+by;   x=x*c/d  y=y*c/d

     1 #include<cstdio>
     2 typedef long long LL;
     3 LL ext_gcd(LL a,LL b,LL &x,LL &y) { //扩展gcd d=gcd(a,b)=a*x+b*y; return d,x,y;
     4     LL t,ret;
     5     if(!b) {
     6         x=1;
     7         y=0;
     8         return a;
     9     }
    10     ret=ext_gcd(b,a%b,x,y);
    11     t=x;
    12     x=y;
    13     y=t-a/b*y;
    14     return ret;
    15 }
    16 int main(){
    17     int t,x,k;
    18     while(~scanf("%d",&t)){
    19         while(t--){
    20             scanf("%d%d",&x,&k);
    21             LL a=x/k;
    22             LL b=a;
    23             if(x%k) b++;
    24             LL tx,ty;
    25             LL d=ext_gcd(a,b,tx,ty);
    26             printf("%lld %lld
    ",tx*x/d,ty*x/d);
    27         }
    28     }
    29     return 0;
    30 }
    View Code

     Alternate Task http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=117&page=show_problem&problem=2828

    求因子的和

     1 #include<cstdio>
     2 int ds_func(int n){//求n所有除数的和
     3     int ret=1,m=n,t;
     4     for(int i=2;i*i<=n;i+=(i==2)?1:2){
     5         if(!(n%i)){
     6             t=i*i;
     7             n/=i;
     8             while(!(n%i)){
     9                 t*=i;
    10                 n/=i;
    11             }
    12             ret*=(t-1)/(i-1);
    13         }
    14     }
    15     return n>1?ret*(n+1):ret;
    16 }
    17 int main(){
    18     int s,cas=1;
    19     while(~scanf("%d",&s),s){
    20         int ans=-1;
    21         for(int i=s;i>=1;i--){
    22             if(ds_func(i)==s){
    23                 ans=i;
    24                 break;
    25             }
    26         }
    27         printf("Case %d: %d
    ",cas++,ans);
    28     }
    29     return 0;
    30 }
    View Code

    1434 - YAPTCHA  http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=447&problem=4180&mosmsg=Submission+received+with+ID+14036675

    找规律,发现3*k+7是素数值为1,否则为0,素数筛法。

     1 #include<cstdio>
     2 #include<cstring>
     3 #define mt(a,b) memset(a,b,sizeof(a))
     4 const int M=3000010;
     5 int pri[M],mark[M],pricnt;//mark[i]存i的最小因子,素数时mark[i]==i
     6 void sieve_primes() { //筛素数
     7     pricnt=0;
     8     mt(mark,0);
     9     mark[0]=mark[1]=1;
    10     for(int i=2; i<M; i++) {
    11         if(!mark[i]) pri[pricnt++]=mark[i]=i;
    12         for(int j=0; pri[j]*i<M; j++) {
    13             mark[i*pri[j]]=pri[j];
    14             if(!(i%pri[j])) break;
    15         }
    16     }
    17 }
    18 int ans[M];
    19 int main(){
    20     sieve_primes();
    21     ans[0]=0;
    22     for(int i=1;i<=1000000;i++){
    23         int j=3*i+7;
    24         ans[i]=ans[i-1];
    25         if(mark[j]==j) ans[i]++;
    26     }
    27     int t,n;
    28     while(~scanf("%d",&t)){
    29         while(t--){
    30             scanf("%d",&n);
    31             printf("%d
    ",ans[n]);
    32         }
    33     }
    34     return 0;
    35 }
    View Code

    1415 - Gauss Prime http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=447&page=show_problem&problem=4161

     1 #include<cstdio>
     2 typedef long long LL;
     3 LL mulmod(LL a,LL b,LL c) { //ret=(a*b)%c
     4     LL ret=0;
     5     for(; b; a=(a<<1)%c,b>>=1) {
     6         if(b&1) {
     7             ret=(ret+a)%c;
     8         }
     9     }
    10     return ret;
    11 }
    12 LL powmod(LL a,LL b,LL c) { //ret=(a^b)%mod
    13     LL ret=1%c;
    14     for(; b; a=mulmod(a,a,c),b>>=1) {
    15         if(b&1) {
    16             ret=mulmod(ret,a,c);
    17         }
    18     }
    19     return ret;
    20 }
    21 bool suspect(LL a,int s,LL d,LL n) {
    22     LL x=powmod(a,d,n);
    23     if(x==1) return true;
    24     while(s--) {
    25         if(x==n-1) return true;
    26         x=mulmod(x,x,n);
    27     }
    28     return false;
    29 }
    30 const int test[]= {2,3,5,7,11,13,17,19,23,29,-1}; // for n < 10^16
    31 bool isprime(LL n) { //Miller-Rabin 大素数测试
    32     if(n<=1||(n>2&&(!(n&1)))) return false;
    33     LL d=n-1;
    34     int s=0;
    35     while(!(d&1)) {
    36         s++;
    37         d>>=1;
    38     }
    39     for(int i=0; test[i]<n&&~test[i]; i++) {
    40         if(!suspect(test[i],s,d,n)) return false;
    41     }
    42     return true;
    43 }
    44 int main(){
    45     int t,a,b;
    46     while(~scanf("%d",&t)){
    47         while(t--){
    48             scanf("%d%d",&a,&b);
    49             if(a){
    50                 LL t=a*a+2*b*b;
    51                 if(isprime(t)){
    52                     puts("Yes");
    53                     continue;
    54                 }
    55             }
    56             puts("No");
    57         }
    58     }
    59     return 0;
    60 }
    View Code

    end

  • 相关阅读:
    curl 命令行使用参考
    PHP 输出json_encode 空白的检查
    RAM和ROM
    浮点数
    负数补码
    位运算
    无法加载文件 C:UsershuangshiminAppDataRoaming pmwechat-terminal.ps1,因为在此系统上禁止运行脚本
    windows + php + shell_exec 执行失败的可能原因
    Ubuntu 发送邮件
    红黑树
  • 原文地址:https://www.cnblogs.com/gaolzzxin/p/3911912.html
Copyright © 2011-2022 走看看