53470327这个数究竟是什么情况?
查看原帖
53470327这个数究竟是什么情况?
373037
封禁用户楼主2021/9/15 22:45

如图,我用样例输入之后算出了7种情况。我在检验中间过程的时候发现了53470327这个数字,而样例解释中并未出现。
我查了一下,也写程序验证了:53470327确实是质数。
但是……
为什么没有这个答案?5347/03/27难道是非法日期?
(搞得我去问同学这个日期是否合法结果被人家当我神经病一样拒绝回答)
运行结果 确认为质数
样例 我的代码:
经检验,质数生成部分的算法应当是完全正确的。

#include<bits/stdc++.h>
using namespace std;
int t,number;
list<int> prime;
string s;
void getp(){
	for(int i=2;i<=10000;i++)
		prime.push_back(i);
	for(list<int>::iterator i=prime.begin();*i<=100;i++)
		for(int j=2;*i*j<=10000;j++)
			prime.remove(*i*j);
}
int strint(string c){
	int answer(0);
	for(int i=0;i<8;i++){
		answer*=10;
		answer+=c[i]-'0';
	}
	return answer;
}
bool judge(int x){
	for(list<int>::iterator i=prime.begin();i!=prime.end();i++)
		if(x%*i==0)
			return 0;
	if(x==1)
		return 0; 
	return 1;
}
bool datejudge(string c){
	int year=(c[0]-'0')*1000+(c[1]-'0')*100+(c[2]-'0')*10+c[3]-'0',month=(c[4]-'0')*10+c[5]-'0',day=(c[6]-'0')*10+c[7]-'0';
	switch(c.find('-')){
		case string::npos:{
			switch(month){
				case 1:
				case 3:
				case 5:
				case 7:
				case 8:
				case 10:
				case 12:{
					if(day>31)
						return 0;
					break;
				}
				case 4:
				case 6:
				case 9:
				case 11:{
					if(day>30)
						return 0;
					break;
				}
				case 2:{
					if(year%4){
						if(day>28)
							return 0;
					}
					else if(year%100){
						if(day>29)
							return 0;
					}
					else if(year%400){
						if(day>28)
							return 0;
					}
					else{
						if(day>29)
							return 0;
					}
					break;
				}
			}
			break;
		}
		case 7:{
			if(month==2&&c[6]>='3')
				return 0;
			else if(c[6]>='4')
				return 0;
		}
		case 6:{
			if((c[4]-'0')*10+c[5]-'0'>12)
				return 0;
		}
		case 5:{
			if(c[4]>'1')
				return 0;
		}
		case 4:{
			if(year==0)
				return 0;
		}
	}
	return 1;
}
void dfs(string now,int pos){
						cout<<now<<endl;
	while(now[pos]!='-'&&pos<8)
		pos++;
	if(pos==8){
		int a=strint(now);
		if(judge(a)){
			number++;
						cout<<'\t'<<a<<endl;
		}
	}
	else
		for(int i='0';i<='9';i++){
			now[pos]=i;
			if(datejudge(now)){
				dfs(now,pos+1);
			}
		}
}
int main(){
	getp();
	cin>>t;
	for(int i=0;i<t;i++){
		number=0;
		cin>>s;
		if((s[7]-'0')%2&&s[7]!='5'){
			dfs(s,0);
			cout<<number<<endl;
		}
		else
			cout<<0<<endl;
	}
	return 0; 
}
2021/9/15 22:45
加载中...