素数串 strlen函数

问题 U: 20级期末机试2-素数串(10分)

#include<stdio.h>
#include<math.h>
#include<string.h>
int isprime(int n)
{
	 if(n<2)
	return 0;
	for(int i=2;i*i<=n;i++)
	{
		if(n%i==0)
		return 0;
	}
	return 1;
}
int main()
{
	char ch[1001]={0};
	while(scanf("%s",ch)!=EOF)//数组名就是头地址,不用再取地址
	{
		int len=strlen(ch);
		int notflag=0;
		for(int i=0;i<len/3;i++)
		{
			int num=(ch[3*i]-'0')*100+(ch[3*i+1]-'0')*10+(ch[3*i+2]-'0');
			if(isprime(num)==0)
			{
				printf("NO\n");
				notflag=1;
				break;
			}
		}
		if(notflag==0)
		{
			if(len%3==2)
			{
				int num1=(ch[len-1]-'0')+(ch[len-2]-'0')*10;
				if(isprime(num1)==0)
				{
					printf("NO\n");
				}
				else
				{
					printf("YES\n");
				}
			}
			else if(len%3==1)
			{
				int num2=ch[len-1]-'0';
				if(isprime(num2)==0)
				{
					printf("NO\n");
				}
				else
				{
					printf("YES\n");
				}
			}
			else if(len%3==0)
			{
				printf("YES\n");
			}
		}
		
	}
	return 0;
}

题目描述

中南CC君最近迷上了素数,素数是指除了1和本身外不能被其他数整除的正整数,2是最小的素数。他发现有一种叫素数串的整数很有意思。它要求从该整数左边开始,每取3位数字构成的整数是素数,剩余的不够3位的整数也是素数。如23311317就是素数串,因为233,113,17都是素数,但是233111就不是,因为111不是素数。给你一个n(1≤n≤101000),你能帮CC君判断一下是素数串整数吗?

输入

多组样例。每行一个样例包含一个整数n。

输出

对于每一个输入的n,输出一个结果,如果是素数串整数,输出"YES",否则输出"NO"。每个输出占一行。

样例输入 Copy

2
3892
100733

样例输出 Copy

YES
YES
NO
#include<stdio.h>
#include<string.h>
// hecker:233002 YES
//        2330   NO
int b[1005]={0};
int len;
char str[1005];
void Eratosthenes(){
	b[0]=b[1]=1;
	for(int i=2;i*i<=1000;i++)
		if(b[i]==0)
			for(int j=i*2;j<=1000;j+=i)
				b[j]=1;
}
int check(){
	int i=0;
	while(i+3<len){	
		int n=0; 
		for(int j=i;j<i+3;j++)
			n=n*10+str[j]-'0';
	
		if(b[n]==1) 
			return 0;	
		
		i+=3;
	}
	
	int n=0;
	
	for(int j=i;j<len;j++)
		n=n*10+str[j]-'0';

	if(b[n]==1) return 0;	
	return 1;
}
int main(){
	Eratosthenes();
	 
	while(scanf("%s",str)!=EOF){
		len=strlen(str);
		
		if(check()==1)
			printf("YES\n");
		else
			printf("NO\n");	
	}
	return 0;
} 

 1、 字符 ” 数组的输入,数组名就是头地址,不用再取地址。

2、i*i<n     i*i<=n    区别很大,3个小时的教训,凋谢,要吐了。

3、打表法判断素数 c语言,素数打表(4种方法)_Matt小特的博客-CSDN博客

4、i*i<=n的注意事项——刷题经验_Echo_ac的博客-CSDN博客

5、字符串转int数据类型的三种方式_亦昕跑的码的博客-CSDN博客_字符串转int

6、判断质数、分解质因数_wmy0217_的博客-CSDN博客

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值