首页 > 试题广场 >

平方因子

[编程题]平方因子
  • 热度指数:5232 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
给定一个数n,判定它是否有一个不为1的完全平方数因子。也就是说,是否存在某个k,k>1,使得k*k能够整除n。

输入描述:
每行一个整数n,1<n<10000


输出描述:
对于每一个输入的整数,在单独的一行输出结果,如果有不为1的完全平方数因子,则输出Yes,否则输出No。请注意大小写。
示例1

输入

15
12
0

输出

No
Yes

python solution

while True:
    try:
        a,res=int(input()),False
        if a!=0:
            for i in range(2,a+1):
                if i**2<=a:
                    if a%i**2 == 0:
                        res=True
                        break
                else:
                    break
            print("Yes" if res else "No")
    except:
        break
发表于 2017-10-03 21:37:53 回复(1)
#include<stdio.h>
int main()
{
    int n,k,key=0;
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0) break;
        for(k=2;k*k<=n;k++)//减少循环次数
            if(n%(k*k)==0)
            {
                key=1;break;
            }
        if(key) printf("Yes\n");
        else    printf("No\n");    
    }
}

发表于 2020-03-27 16:45:30 回复(0)
Java 解法
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            int n = scanner.nextInt();
            for (int i = 2; i <= n&&i*i<=n; i++) {
                if (n%(i*i)==0){
                    System.out.println("Yes");
                    return;
                }
            }
            System.out.println("No");
        }
    }
}


发表于 2020-03-14 13:59:23 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    while(cin>>n){
        if(n==0) break;
        bool judge=1;
        for(int i=2;i<=sqrt(n)&&judge;i++)
            if(n%(i*i)==0)
                judge=0;
        if(!judge)
            cout<<"Yes"<<endl;
        else
            cout<<"No"<<endl;
    }
}

发表于 2020-01-13 21:51:38 回复(0)
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int n,i,k,m=0;
    scanf("%d",&n);
    for(i=2;i<=n;i++)
    {
        k=i*i;
        if(n%k==0)
        {
            m=1;
            break;
        }
    }
    if(m==1)
    printf("Yes\n");
    else
    printf("No\n");
    return 0;
}

发表于 2018-04-08 19:00:07 回复(0)
#define _CRT_SECURE_NO_WARNINGS

#include<iostream>
using namespace std;
/*
    给定一个数n,判定它是否有一个不为1的完全平方数因子。也就是说,是否存在某个k,k>1,使得k*k能够整除n。
    */
int main()
{
    int n;
    while (cin>>n)
    {
        int flg = 0;
        for (int i = 2; i < n; i++)
        {
            if (i*i%n == 0) flg = 1;
        }
        if (flg == 0) cout << "No" << endl;
        else cout << "Yes" << endl;
    }
    return 0;
}

发表于 2018-03-19 09:38:40 回复(0)
#include<stdio.h>
int main (){//the shorter,the better.
    int n,i;
    for(;~scanf("%d",&n)&&n;)
        for (i = 2;n%(i*i)%n==0?(n%(i*i)==0?printf("Yes\n"):printf("No\n"),0):1;i++);
}

发表于 2018-01-12 14:13:33 回复(0)
#include <iostream>
using namespace std;

int SquareFactor(int N) {
    for (int i = 2; i * i <= N; i++)
        if (N % (i * i) == 0)
            return 1;
    return 0;
}

int main() {
    int N;
    while (cin >> N && N)
        if (SquareFactor(N))
            cout << "Yes" << endl;
        else
            cout << "No" << endl;
    return 0;
}



编辑于 2017-02-15 16:09:28 回复(0)
#include<bits/stdc++.h>
int main(){
    int n,i;
    while(scanf("%d",&n)!=EOF){
        for(i=2;i<=sqrt(n);i++)
            if(n%(i*i)==0){
                printf("Yes\n");
                break;
            }
        if(i>sqrt(n)) printf("No\n");
    }
}
发表于 2019-03-20 09:34:30 回复(0)
#include <iostream>
using namespace std;
int main(){
    int n;
    while(cin >> n && n!=0){
        bool flag = false;
        for(int i=2; i*i<=n; ++i){
            if(n%(i*i) == 0){
                flag = true;
                cout << "Yes" << endl;
                break;
            }
        }
        if(!flag) cout << "No" << endl;
    }
}

编辑于 2024-03-14 15:47:33 回复(0)
#include <iostream>
using namespace std;

int main() {
    int n;
    while (cin >> n) {
        bool exist = false;
        for (int k = 2; k * k <= n; k++) {
            if (n % (k * k) == 0) {
                exist = true;
                break;
            }
        }
        cout << (exist ? "Yes" : "No") << endl;
    }
    return 0;
}

发表于 2024-03-04 12:17:32 回复(0)
#include <iostream>
#include <cmath>
using namespace std;

int main() {
    int n;
    while(cin>>n&&n!=0){
        bool tag=false;
        for(int i=2;i<=sqrt(n);i++){
            if(n%(i*i)==0){
                tag=true;
                break;
            }
        }
        if(tag){
            cout<<"Yes"<<endl;
        }
        else{
            cout<<"No"<<endl;
        }
    }
    return 0;
}

发表于 2023-03-24 13:37:04 回复(0)
#include <cstdio>

int main(){
    int n;
    while(scanf("%d",&n) != EOF){
        if(n == 0) break;
        bool flag = false;
        for(int k = 2; k < n; ++k){
            if(n%(k*k) == 0){  //k*k能整除n
                printf("Yes\n");
                flag = true;
                break; //若有多个k符合条件,只输出一次Yes
            }
        }
        if(flag == false){
            printf("No\n");
        }
    }
    return 0;
}

发表于 2023-03-22 11:39:16 回复(0)
#include <iostream>
using namespace std;
int main() {
    int n;
    while(cin>>n){
        if(n == 1){
            cout<<"No"<<endl;
            break;
        }
        double b[100] = {0};//必须要用double,防止5/2=2这种情况发生。
        for(int i=2;i<=n;i++){
            if(n%i == 0){
                b[i] = i;
            }
        }
        int flag = 0;
        for(int i=2;i<100;i++){
            for(int j=0;j<100;j++){
                if(b[j]/i == i){
                    cout<<"Yes"<<endl;
                    flag = 1;
                    break;
                }
            }
            if(flag == 1)break;
        }
        if(flag == 0){
            cout<<"No"<<endl;
        }
    }
    return 0;
}
发表于 2023-03-07 15:58:04 回复(0)
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;




int main() {
    int n;
    while (cin >> n) { // 注意 while 处理多个 case
        if(n < 2) {cout <<"No" << endl;continue;}

        if((int)sqrt(n)*(int)sqrt(n) == n) {cout <<"Yes"<<endl;continue;}
        bool flag = false;
        for(int i=2;i <=sqrt(n);++i){

            if(n%i==0){
                if((int)sqrt(i)*(int)sqrt(i) == i) {flag = true; cout <<"Yes" << endl;
                    break;}
                if((int)sqrt(n/i)*(int)sqrt(n/i)==n/i) {flag = true; cout <<"Yes" << endl;
                    break;}
            }

        }
        if(!flag){
            cout << "No" << endl;
        }

    }
}
// 64 位输出请用 printf("%lld")

发表于 2023-03-05 15:31:07 回复(0)
利用质因数分解思想,如果存在两个及以上的相同因子就代表又完全平方数的因子
#include<iostream>
#include<cmath>
using namespace std;
int main(){
    int n;
    while(cin >> n && n){
        if((int)sqrt(n) == sqrt(n) && n != 1) {cout << "Yes" << endl;} //首先判断本身是不是完全平方数
        else{//进行质因数分解,若出现两个及以上相同的因数代表存在完全平方数的因子
            int cnt = 0;
            for(int i = 2;i <= sqrt(n);i++){
                cnt = 0;
                while(n % i == 0){
                    cnt++;
                    n /= i;
                }
                if(cnt >= 2) {cout << "Yes" << endl; break;}
            }
            if(cnt < 2) {cout <<"No" << endl;}
        }
    }  
}


发表于 2022-05-14 19:05:47 回复(0)
# include <iostream>
# include <string>

using namespace std;

int main()
{
    int n;
    while(cin>>n)
    {
        if(n==0)
        {
            break;
        }
        bool temp=false;
        for(int i=2;i<n;i++)
        {
            if((i*i)%n==0)
            {
                temp=true;
            }
        }
        if(!temp)
        {
            cout<<"No"<<endl;
        }
        if(temp)
        {
            cout<<"Yes"<<endl;
        }
    }
    return 0;
 }
 
发表于 2022-02-20 15:16:40 回复(0)
#include<iostream>
using namespace std;
#define max_len 10001

int main(void)
{
    int n;
    bool count = false;//记录是否有完全平方数因子
    
    while(cin >> n)
    {
        if(n >= max_len && n <= 1)
            break;
        
        if(n < max_len)
        {
            for(int i = 2;i <= n;i++)
            {
                int temp = i * i;
                if(n % temp == 0)
                {
                    cout << "Yes" << endl;
                    count = true;
                    break;
                }
            }
        }
        
        if(n < max_len && count == false)
        {
            cout << "No" << endl;
            break;
        }
    }

    return 0;
}

发表于 2021-02-01 20:51:16 回复(0)
#include<stdio.h>
#include<math.h>
int main()
{
	int n,k;
	while(scanf("%d",&n)!=EOF)
	{
		if(n==0) break;
		for(k=2;k<=sqrt(n);k++)
		{
			if(n%(k*k)==0)
			{
				printf("Yes\n");
				break; 	
			}
		}
		if(k>sqrt(n))
		printf("No\n");
	}
	return 0;
}

发表于 2020-05-21 16:39:21 回复(0)
#include<cstdio>
int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
          int i;
          for(i=2;i*i<=n;++i){
              if(n%(i*i)==0)
              {
                  printf("Yes\n");
                  break;
              }
          }
          if(i*i>n)
              printf("No\n");
    }
    return 0;
}


发表于 2020-04-27 15:59:35 回复(0)

问题信息

难度:
53条回答 5862浏览

热门推荐

通过挑战的用户

查看代码