ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

质数串 乱搞

2019-04-05 10:41:07  阅读:236  来源: 互联网

标签:cnt ++ 质数 d% 乱搞 scanf define


  

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

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

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

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

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

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

Input

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

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

第二行包含一个长度为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\n",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;
}

 











标签:cnt,++,质数,d%,乱搞,scanf,define
来源: https://www.cnblogs.com/bxd123/p/10658075.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有