⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sp.cpp

📁 用C++写的一个SP算法
💻 CPP
字号:
#include<iostream.h>
#include <cassert>
#include <math.h>
#define  MAX_NUM  99
//const int MAX_NUM=99;
//判断一个数是否是素数
bool check(int n)
{
	for(int i=2;i<n;i++)
		if(n%i==0)
			return false;
	return true;
}

//检查条件一:是否满足
bool by_condition_1(int x, int y)
{
	 
  
  int sum = x+y;
  if(sum == 4)
    return false;
  for(int i=2; i<=sum/2; i++)
    {
      if(check(i) &&check(sum -i))
        return false; 
    }
  return true;
}
//检查条件二:是否满足
bool by_condition_2(int x, int y)
{
//  assert(x<=y);
  int product =x*y;

  //统计满足条件1的分解可能

  int count_condition_1 =0;
  
  for(int i =2; i<=sqrt(product); i++)
    {
      if(product %i == 0 )
		  if((product/i) <= MAX_NUM)
            if(by_condition_1(i,product/i))
              if(++count_condition_1 >=2)
              break;  
    }
  if( count_condition_1 == 1)
    return true;
  return false;
}

//检查条件三:是否满足
bool by_condition_3(int x, int y)
{
  int sum = x+y;

  //统计所有满足条件2的拆分可能

  int count_condition_2 = 0;
  
  for(int i=2; i<=sum/2; i++)
    {
      if(by_condition_2(i,sum-i))
        if(++count_condition_2 >= 2)
          break;
    }

  if(count_condition_2 == 1)
    return true;
  return false;
}

int main()
{

	int s[100];
	int n=0;
	int m1=0,m2;
	for(int i=2;i<100;i++)
		for(int j=2;j<i;j++)
			if(by_condition_1(i,j))
			{
                m2=i+j;
				if(m2!=m1)
				s[n++]=m2;
				m1=m2;
				break;
			}
	cout<<"第一句话结果:(s剩余数)"<<endl;
	for(int k=0;k<n;k++)
			cout<<s[k]<<"  ";
	cout<<endl;
	for(int x=2;x<100;x++)
		for(int y=2;y<x;y++)
          if( by_condition_1(x,y) &&
          by_condition_2(x,y) &&
          by_condition_3(x,y))
        {
		  cout<<"******通过以上博弈搜索可得,在满足条件一,二,三的前提下:******"<<endl;
		  cout<<"S先生得到的两个数的和为:SUM = "<<x+y<<endl;
		  cout<<"P先生得到的两个数的积为:MUL = "<<x*y<<endl;
          cout<<"X = "<<x<<"  ,   "<<"Y = "<<y<<endl;
        }
		
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -