zoukankan      html  css  js  c++  java
  • ural 1091

    题目:http://acm.timus.ru/problem.aspx?space=1&num=1091

    题意:从 s 个数里挑出 k 个, 这个 k 个数的共因子大于 1 一共有多少种方法

    直接暴搜,注意剪枝优化

    View Code
     1 typedef long long ll;
     2 const int N = 60;
     3 int ans,k,s;
     4 bool vis[N];
     5 int flag;
     6 int gcd(int a,int b)
     7 {
     8     if(!b) return a;
     9     else return gcd(b,a % b);
    10 }
    11 bool juge()
    12 {
    13     int i;
    14     for(i = 0; i <= s; i++)
    15     if(vis[i]) break;
    16     int g = i;
    17     while(i <= s)
    18     {
    19         if(vis[i])
    20         {
    21             g = gcd(max(g,i),min(g,i));
    22             if(g == 1) return false;
    23         }
    24         i ++;
    25     }
    26     return true;
    27 }
    28 void dfs(int x,int num)
    29 {
    30     if(x > s + 1 || k + x - num > s + 1 || !juge()) return ;
    31     if(num == k)
    32     {
    33         if(juge()) ans ++;
    34         if(ans > 10000)
    35         {
    36             flag = 1, ans = 10000; //return ;
    37         }
    38         return ;
    39     }
    40     vis[x] = true;
    41     dfs(x + 1,num + 1);
    42     vis[x] = false;
    43     dfs(x + 1,num);
    44 }
    45 int main()
    46 {
    47     int i,j;
    48     while(scanf("%d%d",&k,&s) != EOF)
    49     {
    50         ans = 0;
    51         flag = 0;
    52         dfs(2,0);
    53         printf("%d\n",ans);
    54     }
    55     return 0;
    56 }

    题目:http://acm.timus.ru/problem.aspx?space=1&num=1204

    题意:给出同余式,然后找出所有在 n 以内的数x ,使得满足给的关系式

    根据同余的性质:a 和 b 同余 n ,那么 a 和 b 的差就是 n 的倍数。所以题目的方程式就可以转换为:x * (x - 1) % n == 0,因为题目说了 n == p1 * p2(p1 p2 是两个不同的素数,假设p1 < p2),所以对 n 分解,然后从p2 开始枚举 1 * p2 , 2 * p2, 3 * p2 ~~~~p1 * p2

    View Code
     1 const int N = 31630;
     2 int prime[N];
     3 bool vis[N];
     4 int num;
     5 void is_prime()
     6 {
     7     int i,j;
     8     for(i = 2; i < N ;i++)
     9     {
    10         if(!vis[i])
    11         {
    12             prime[num ++] = i;
    13             for(j = 1; j * i < N; j++)
    14             {
    15                 if(vis[i * j]) continue;
    16                 vis[i * j] = true;
    17             }
    18         }
    19     }
    20 }
    21 int main()
    22 {
    23     num = 0;
    24     is_prime();
    25     int n,t,i;
    26     scanf("%d",&t);
    27     while(t--)
    28     {
    29         scanf("%d",&n);
    30         //cout<<prime[n - 1]<<endl;
    31         for(i = 0; i < num; i++)
    32         if(n % prime[i] == 0) break;
    33         int p = prime[i], q = n / prime[i];
    34         //cout<<"p = "<<p<<" "<<q<<endl;
    35         printf("0 1");
    36         for(i = q; i < n; i += q)
    37         {
    38           if((i - 1) % p == 0) printf(" %d",i);
    39           if((i + 1) % p == 0) printf(" %d",i + 1);
    40         }
    41         printf("\n");
    42 
    43     }
    44     return 0;
    45 }
  • 相关阅读:
    mysql的存储过程
    一份php高级工程师的面试题,我每天看一点点
    php的常用函数(持续更新)
    php 中文字符串截取
    php递归遍历文件目录
    ajax timeout 断网处理
    angular 刷新问题
    angular state中templateUrl 路径的模板
    angular请求传递不了数据
    截取字符串 substring substr slice
  • 原文地址:https://www.cnblogs.com/fxh19911107/p/2706530.html
Copyright © 2011-2022 走看看