zoukankan      html  css  js  c++  java
  • URAL 1356. Something Easier(哥德巴赫猜想)

    题目链接

    题意 : 给你一个数n,让你找出几个素数,使其相加为n,输出这些素数。

    思路 :

    哥德巴赫猜想 :

    任何一个大于 6的偶数都可以表示成两个素数之和。

    任何一个大于9的奇数都可以表示成三个素数之和。 

    而在该题中,偶数中2本身就是个素数,奇数中小于9的都是素数,所以只要写一个判断素数的函数即可,这样不在范围内的数就可以直接判断输出了。

    任何一个整数N(N>=2)最多由三个素数相加构成。要分情况考虑:

      1. 如果N为偶数,1)如果N==2,直接输出;

                            2)如果N>2,那么N一定可以写成两个素数的和;

      2.如果N为奇数,1)如果N自身就是素数,则直接输出;

                            2)如果N由两个素数构成,这两个素数只可能是:2 和 N-2;

                            3)N为三个素数之和。

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <iostream>
     4 
     5 using namespace std ;
     6 
     7 bool prime(int n)
     8 {
     9     for(int i = 2 ; i * i <= n ; i++)
    10     {
    11         if(n % i == 0) return false ;
    12     }
    13     return true ;
    14 }
    15 int main()
    16 {
    17     int T,n ;
    18     scanf("%d",&T) ;
    19     while(T--)
    20     {
    21         scanf("%d",&n) ;
    22         if(n % 2 == 0)
    23         {
    24             if(n == 2)
    25                 printf("2
    ") ;
    26         //    else if(n == 4) printf("2 2
    ") ;
    27             else{
    28                 for(int i = 3 ; i <= n ; i += 2)
    29                 {
    30                     if(prime(i) && prime(n-i))
    31                     {
    32                         printf("%d %d
    ",i,n-i) ;
    33                         break ;
    34                     }
    35                 }
    36             }
    37         }
    38         else
    39         {
    40             if(prime(n)) printf("%d
    ",n) ;
    41             else if(prime(n-2)) printf("2 %d
    ",n-2) ;
    42             //else if(prime(n-4)) printf("2 2 %d
    ",n-4) ;
    43             else
    44             {
    45                     bool flag = false ;
    46                 for(int i = 3 ; i <= n ; i += 2)
    47                 {
    48                     for(int j = 3 ; j <= n ; j += 2)
    49                     {
    50                         if(prime(i) && prime(j) && prime(n-i-j))
    51                         {
    52                             printf("%d %d %d
    ",i,j,n-i-j);
    53                             flag = true ;
    54                             break;
    55                         }
    56                     }
    57                     if(flag) break ;
    58                 }
    59             }
    60         }
    61     }
    62     return 0 ;
    63 }
    View Code
  • 相关阅读:
    C#中的转义字符verbatim string
    how to use Inspector in fiddler
    how to use composer in fiddler
    CodeWars上的JavaScript技巧积累
    What's the difference between using “let” and “var” to declare a variable in JavaScript?
    Loop through an array in JavaScript
    Why does typeof array with objects return “Object” and not “Array”?
    Owin and Startup class
    Qt Widgets、QML、Qt Quick的区别
    飞舞的蝴蝶(GraphicsView框架)
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/4077271.html
Copyright © 2011-2022 走看看