zoukankan      html  css  js  c++  java
  • 质数串 乱搞

      

    一个正整数x是质数,当且仅当x2x不是任何一个[2,x1]的数的倍数。

    一个数字串是''质数串'',当且仅当它的每个非空连续子串表示的数字都是质数。

    例子1:"373"是质数串,它的子串有"3"、"37"、"373"、"7"、"73"、"3",这些串表示的数字都是质数。

    例子2:"55"不是质数串,因为"55"这个子串表示的数字不是质数。

    相信聪明的你一定已经发现了一个事实,那就是质数串的限制很紧,所以质数串的数量其实非常稀少。

    给定一个长度为n的数字串S,请统计它有多少个非空连续子串是质数串。注意两个子串如果位置不同也算不同,比如"373373"中,"373"要算入答案两次。

    Input

    第一行包含一个正整数T(1T30),表示测试数据的组数。

    每组数据第一行包含一个正整数n(1n100000),表示数字串的长度。

    第二行包含一个长度为n的仅由字符'1'到'9'组成的字符串S

    Output

    对于每组数据输出一行一个整数,即是质数串的非空连续子串数量。

    Sample Input

    3
    6
    373373
    5
    37373
    3
    313

    Sample Output

    12
    11
    2


    一拿到题感觉是dp 因为之前做过这种类似的字符dp 但是想不出来状态转移

    题目暗示了质数串的条件非常严苛 所以可以枚举10000里面的答案
    很快发现只有

    2
    3
    5
    7
    23
    37
    53
    73
    373

     满足质数串   

    很多题都可以枚举寻找普遍性来做  就像广工的那题简单数学题

    #include<bits/stdc++.h>
    using namespace std;
    //input
    #define rep(i,a,b) for(int i=(a);i<=(b);i++)
    #define repp(i,a,b) for(int i=(a);i>=(b);i--)
    #define RI(n) scanf("%d",&(n))
    #define RII(n,m) scanf("%d%d",&n,&m);
    #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
    #define RS(s) scanf("%s",s);
    #define ll long long
    #define inf 0x3f3f3f3f
    #define REP(i,N)  for(int i=0;i<(N);i++)
    #define CLR(A,v)  memset(A,v,sizeof A)
    //////////////////////////////////
    #define N 500+5
    bool su(int x)
    {
        if(x==1)return 0;
        rep(i,2,sqrt(x))
        if(x%i==0)return 0;
        return 1;
    }
    int a[1000];
    int main()
    {
        rep(i,2,10000)
        {
            int temp=i;
            int len=0;
            while(temp)
            {
                len++;
                a[len]=temp%10;
                temp/=10;
            }
            int ok=1;
            rep(j,1,len)
            rep(k,j,len)
            {
                int sum=0;
                repp(s,k,j)
                sum=sum*10+a[s];
                if( !su(sum) )ok=0;
            }
            if(ok)printf("%d
    ",i);
        }
    }
    枚举
    #include<bits/stdc++.h>
    using namespace std;
    //input
    #define rep(i,a,b) for(int i=(a);i<=(b);i++)
    #define repp(i,a,b) for(int i=(a);i>=(b);i--)
    #define RI(n) scanf("%d",&(n))
    #define RII(n,m) scanf("%d%d",&n,&m);
    #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
    #define RS(s) scanf("%s",s);
    #define ll long long
    #define inf 0x3f3f3f3f
    #define REP(i,N)  for(int i=0;i<(N);i++)
    #define CLR(A,v)  memset(A,v,sizeof A)
    //////////////////////////////////
    #define N 500+5
    int main()
    {
        string s;
        int cas;
        RI(cas);
        while(cas--)
        {
            int cnt=0;
            int len;
            RI(len);
            cin>>s;
            rep(i,0,len-1)
            {
              if(s[i]=='2')cnt++;
              if(s[i]=='3')cnt++;
              if(s[i]=='5')cnt++;
              if(s[i]=='7')cnt++;
              if(s[i]=='2'&&s[i+1]=='3')cnt++;
              if(s[i]=='3'&&s[i+1]=='7')cnt++;
              if(s[i]=='5'&&s[i+1]=='3')cnt++;
              if(s[i]=='7'&&s[i+1]=='3')cnt++;
              if(s[i]=='3'&&s[i+1]=='7'&&s[i+2]=='3')cnt++;
            }
          cout<<cnt<<endl;
        }
        return 0;
    }










  • 相关阅读:
    读取xml文件(可执行文件根目录debug)
    c# winform textbox与combox让用户不能输入
    枚举类型
    值类型与引用类型
    error: failed to push some refs to 'https://git.oschina.net/bluede/TuShuGuanLi.g it'
    left join on 和where中条件的放置位置
    left join、right join、inner join、full join
    Union、Union All、Intersect、Minus
    分层设计的好处
    Hibernate查询方式
  • 原文地址:https://www.cnblogs.com/bxd123/p/10658075.html
Copyright © 2011-2022 走看看