zoukankan      html  css  js  c++  java
  • BuaacodingT651 我知道你不知道圣诞节做什么 题解(逻辑)

    题目链接

    我知道你不知道圣诞节做什么

    解题思路

    第一句话:x,y不都为质数。
    第二句话:对于xy=t,存在唯一一种x+y使得x,y不都为质数。
    第三句话:对于x+y=s,存在唯一一种t=xy使得对于任意满足xy=t的x和y,存在唯一一种x+y使得x,y不都为质数。

    AC代码

    /* 
     Author: 牟钰
     Result: AC	Submission_id: 1188891
     Created at: Mon Nov 26 2018 12:44:11 GMT+0800 (CST)
     Problem_id: 651	Time: 5	Memory: 1464
    */
    
    #include<stdio.h>
    int prime[100]={2},cnt=1;
    int vis[210];
    int main(){
    	int i,j;
    	//筛选出不能表示为两个质数和的情况
    	for(i=3;i<=100;i+=2){
    		int flag=0;
    		for(j=0;prime[j]*prime[j]<=i;j++){
    			if(i%prime[j]==0){
    				flag=1;
    				break;
    			}
    		}
    		if(!flag)prime[cnt++]=i;
    	} 
    	for(i=0;i<cnt;i++){
    		for(j=0;j<cnt;j++){
    			int p=prime[i]+prime[j];
    			if(p>200)break;
    			vis[p]++;
    		}
    	}
    	//筛选出对于任意xy满足xy=i时,只有一组x+y不能表示为两个质数之和的情况
    	int t[10000]={0},count=0;
    	for(i=4;i<=99*99;i++){
    		int flag=0;
    		for(j=2;j*j<=i;j++)if(i/j<=99&&i%j==0&&!vis[j+i/j])flag++;
    		if(flag==1)t[i]=1;
    	}
    	//筛选出对于任意xy满足x+y=i时,只有一组xy满足上述筛的情况
    	int ans=0,ai[10]={0},ai2[10]={0};
    	for(i=4;i<=198;i++){
    		int flag=0,temp;
    		if(vis[i])continue;
    		for(j=2;j<=i/2;j++){
    			if(t[j*(i-j)]){
    				flag++;
    				temp=j;
    			}
    		}
    		if(flag==1){
    			ans++;
    			ai[ans-1]=i;
    			ai2[ans-1]=temp*(i-temp);
    		}
    	}
    	printf("%d
    ",ans);
    	for(i=0;i<ans;i++){
    		printf("%d %d
    ",ai[i],ai2[i]);
    	}
    	return 0;
    }
    
    
  • 相关阅读:
    PAT 1017 Queueing at Bank
    一句有意思的代码
    PAT 1031 Hello World for U
    PAT 1024 Palindromic Number
    PAT 1032 Sharing
    各显神通
    ZJU PAT 1023
    静夜,乱思
    PAT 1024 Palindromic Number
    虚函数表
  • 原文地址:https://www.cnblogs.com/Potassium/p/10019714.html
Copyright © 2011-2022 走看看