0073-简单的素数问题

简单的素数问题
难度级别:B; 运行时间限制:1000ms; 运行空间限制:256000KB; 代码长度限制:2000000B

试题描述

已知三个素数的和为 n ,正整数 n 由键盘输入,计算并输出这三个素数乘积的最大值。

输入

一个正整数 n(给定的测试数据中 n 一定是偶数)。

输出

一个数,表示三个素数乘积的最大值

输入示例

42

输出示例

782

其他说明

数据范围: 10 <= n <= 10000 。

  这道题我们需要知道一些方法和常识。

  首先,题目中说“给定的测试数据中n一定是偶数”。我们都知道除2之外其他质数都是奇数。而此题有三个质数,和必为奇数。由此推出这三个指数中必有一个偶数,即唯一的偶质数2。

  其次,要想判断一个数是否为质数,我们需要用两重循环。外层循环来找出你需要判断的数。内层循环从2开始,到该数的开方(好像数学上就是这么做的)或该数减一结束(一定不能到该数在结束,不然任何数都是合数了)。如果外层循环找出的数除以内层循环当前的数余数为0,及该数为合数,可以停止判断如果内层循环自增到和外层循环找出的数一样,即该数为质数。或者提前立一个初始值赋0的flag,在外层循环找出的数除以内层循环当前的数余0时,flag赋1。循环结束后判断一下flag的值也行。

  说了这么多,到底该怎么用呢?

  代码:

#include<bits/stdc++.h>
using namespace std;
int i,j,k,n,a,b,c;
int main()
{
	scanf("%d",&n);
	n-=2;//题目中说“给定的测试数据中n一定是偶数”,三个奇数之和必为奇数,所以必有2。
	for(i=n/2;i<=n;i++)//和一定差小积大。
	{
		for(j=2;j<i;j++) if(!(i%j)) break;//i被j整除说明i是合数。
		if(j==i)//j自增到i说明i为质数。
		{
			for(k=2;k<n-i;k++) if(!((n-i)%k)) break;//(n-i)被k整除说明(n-i)是合数。
			if(k==n-i)//k自增到(n-i)说明(n-i)为质数。
			{
				cout<<i*(n-i)*2;//输出刚找到两数和2的积。
				break;//马上退出。
			}
		}
	}
	return 0;
}

原文地址:https://www.cnblogs.com/DARTH-VADER-EMPIRE/p/9739932.html

时间: 2024-10-21 15:31:59

0073-简单的素数问题的相关文章

简单的素数问题

[问题描述] 已知三个素数的和为 n ,正整数 n 由键盘输入,计算并输出这三个素数乘积的最大值. [代码展示] # include<iostream>using namespace std;int sushu(int x){ for(int i=2;i<=x/2;i++){ // 如果是合数,返回0; if(x%i==0){ return 0; } } return x; // 返回素数; }int main(){ int n,s,a[500],count=0,max=0; cin &

Kinect实现简单的三维重建

Kinect想必大家已经很熟悉了,最近基于Kinect的创意应用更是呈井喷状态啊!看到很多国外大牛用Kinect做三维重建,其中最著名的要数来自微软研究院的Kinect Fusion了,可以看看下面这个视频http://v.ku6.com/show/7q2Sa__pa4-rWcAVtB3Xuw...html,或者http://v.youku.com/v_show/id_XNDcxOTg3MzUy.html. 可惜Kinect Fusion是不开源的,不过PCL实现了一个差不多的开源版本,http

C# Ping 简单使用

编程过程中,有时候需要判断主机是否在线,最简单的方法就是使用Windows的Ping命令看看能否ping通.看到网上很多文章,说用C#去调用windows的ping.exe,然后解析返回的字符串.我觉得这种方式太麻烦了,就做一下简单判断,不想弄那么麻烦. 查了一下,C#专门提供了一个Ping类,与Windows下的ping命令类似: 命令空间: System.Net.NetworkInformation; 使用方法: bool online = false; //是否在线 Ping ping =

自动生成简单四则运算的C语言程序

该程序是在博客园里面找的,具体是谁的找了半天没找到,无法提供它原本的链接.由于自己写的过于简单,且有一些功能暂时无法实现,所以就找了一个来应付作业,望原谅.在这个程序的源码中我改了一个错误的地方,源码中有这样一个随机数发生器的初始化函数的语句:"srand((unsigned)time(NULL))".srand函数是随机数发生器的初始化函数.但是正确的写法应该是:srand(unsigned( time(NULL))):为了防止随机数每次重复,常常使用系统时间来初始化,即使用time

Mysql的锁机制与PHP文件锁处理高并发简单思路

以购买商品举例: ① 从数据库获取库存的数量. ② 检查一下库存的数量是否充足. ③ 库存的数量减去买家购买的数量(以每个用户购买一个为例). ④ 最后完成购买. 仅仅这几行逻辑代码在并发的情况下会出现问题,自己可以想象一下. 这里暂时就不测试了,下面会针对并发的处理给出测试结果. 创建表: CREATE TABLE `warehouse` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', `stock` int(11) NOT NULL

Winfrom 简单的安卓手机屏幕获取和安卓简单操作

为啥我要做这个东西了,是因为经常要用投影演示app ,现在有很多这样的软件可以把手机界面投到电脑上 ,但都要安装,比如说360的手机助手,我又讨厌安装,于是就自己捣鼓了下 做了这个东西, 实现了以下简单功能   1.屏幕获取(因为是截图方式获取的,所以有点卡顿) 2.实现点击功能,并在点击的时候出现一个手势图标,方便用户观看 3.实现简单的滑动功能 4.实现在界面上画图功能 5.实现拖拽安装apk功能 操作说明:鼠标左边 模拟手机点击,中键停止/开始刷新界面(画图的时候不能刷新),右键去掉画图内

iOS instruments之ui automation的简单使用(高手绕道)

最近使用了几次instruments中的automation工具,现记录下automation的简单使用方法,希望对没接触过自动化测试又有需求的人有所帮助.  UI 自动测试是iOS 中重要的附加功能,它由名为"Automation"的新的工具对象支持.Automation工具的脚本是用JavaScript语言编写,主要用于分析应用的性能和用户行为,模仿/击发被请求的事件,利用它可以完成对被测应用的简单的UI测试及相关功能测试. 一. 简单的录制脚本 打开xcode,这里用我为我家亲爱

Android ExpandableListView 带有Checkbox的简单应用

expandablelistview2_groups.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height=&qu

Android ExpandableListView的简单应用

Expandablelistview1Activity.java package com.wangzhu.demoexpandablelistview; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.widg